レジストリを導入する前に、プロバイダーとコンシューマーの概念を紹介します。
プロバイダーとコンシューマー
サービス プロバイダー: ビジネス内の他のマイクロサービスによって呼び出されるサービス。 (他のマイクロサービスへのインターフェースを提供する)
サービス コンシューマー: 1 つのビジネス内の他のマイクロサービスを呼び出すサービス。 (他のマイクロサービスによって提供されるインターフェースの呼び出し)
プロバイダーとコンシューマーは相対的です。サービスはプロバイダーとコンシューマーの両方になることができます。
Eureka
プロバイダーが複数ある場合、消費者はどのようにしてプロバイダー情報を入手し、プロバイダーの健全性状態を知ることができるのでしょうか?
起動時に、マイクロサービスは Eureka にサービス情報を登録します。コンシューマーは Eureka を通じてプロバイダー情報を取得し、それをリモートで呼び出すことができます。マイクロサービスは 30 秒ごとに Eureka にまだ稼働中であることを通知し、Eureka はサービス リスト情報を更新して、正常でないサーバーを削除します。
複数のサービス プロバイダーがある場合、コンシューマーは負荷分散アルゴリズムを使用してサービス リストから 1 つを選択します。
建てる
新しい Maven モジュールを作成し、依存関係を導入する
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
スタートアップクラスの作成
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
設定ファイル
server:
port: 7995
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:7995/eureka
サービスに登録する
依存関係の導入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
構成の記述
spring:
application:
name: userService
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:7995/eureka
サービスの利用
上記の登録例
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
ドメイン名をサービス名に変更する
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.注文をクエリ
Order order = orderMapper.findById(orderId);
// 2.ユーザーをクエリ
// String url = "http://localhost:8081/user/" + order.getUserId();
String url = "http://userService/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);
// 3.ユーザー情報をカプセル化する
order.setUser(user);
// 4.戻る
return order;
}
}