プロバイダーと消費者
サービス プロバイダー: ビジネス内の他のマイクロサービスによって呼び出されるサービス。(他のマイクロサービスへのインターフェイスを提供する)
サービス コンシューマー: 1 つのビジネス内で、他のマイクロサービスを呼び出すサービス。(他のサービスが提供するインターフェースを呼び出す)
思考: サービス A はサービス B を呼び出し、サービス B はサービス C を呼び出します。では、サービス B の役割は何でしょうか?
サービス B はサービス A に関してプロバイダーであり、サービス B はサービス C に関してコンシューマーです。
まとめ:
サービスコール関係:
- サービス プロバイダー: インターフェイスを他のマイクロサービス呼び出しに公開します。
- サービスコンシューマ: 他のマイクロサービスによって提供されるインターフェイスを呼び出す
- プロバイダーとコンシューマーの役割は相対的です
目次:
- リモート通話の問題
- エウレカ原理
- エウレカサーバーを構築する
- サービス登録
- サービスディスカバリ
サービスコールの問題
サービスコールの問題
- サービス利用者はどのようにしてサービスプロバイダーのアドレス情報を取得するのでしょうか?
- サービスプロバイダーが複数ある場合、消費者はどのように選択すればよいでしょうか?
- 消費者はどのようにしてサービス提供者の健康状態を知るのでしょうか?
エウレカの役柄
サービス利用者はサービスプロバイダーに関する特定の情報をどのようにして入手しますか?
- サービス提供者はサービス開始時に自身の情報をeurekaに登録します
- エウレカはこの情報を保存します
- 消費者はサービス名に従って eureka からプロバイダー情報を取得します
サービスプロバイダーが複数ある場合、消費者はどのように選択すればよいでしょうか?
- サービスコンシューマは負荷分散アルゴリズムを使用してサービスリストからサービスを選択します
消費者はどのようにしてサービス提供者の健康状態を知るのでしょうか?
- サービス プロバイダーは、ヘルス ステータスを報告するために 30 秒ごとに EurekaServer にハートビート リクエストを送信します。
- eurekaはレコードサービスリスト情報を更新し、異常なハートビートを削除します
- 消費者は最新ニュースを入手できる
まとめ:
Eureka アーキテクチャには、2 種類のマイクロサービス ロールがあります。
EurekaServer : サーバー、登録センター
- サービス情報を記録する
- ハートビートモニタリング
EurekaClient : クライアント
- プロバイダー: サービスプロバイダー (例: ユーザーサービス)
-
- エウレカサーバーに自分の情報を登録する
-
- 30 秒ごとにハートビートを EurekaServer に送信します
- Consumer: サービス消費者 (例: order-service)
-
- サービス名に従って EurekaServier からサービス リストを取得します
-
- 負荷分散用のサービス リストに基づいて、リモート呼び出しを開始するマイクロサービスを選択します
euraka サービスを構築する
- 登録センターの構築: EurekaServer の構築
- サービス登録: ユーザーサービスとオーダーサービスをエウレカに登録します
- サービス検出: オーダーサービスでサービスのプルを完了し、負荷分散を通じてサービスを選択してリモート呼び出しを実現します。
エウレカサーバーを構築する
EurekaServer サービスを構築する手順は次のとおりです。
- プロジェクトを作成し、spring-cscloud-starter-netflix-eureka-server の依存関係を導入する
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cscloud-starter-netflix-eureka-server</artifactId>
</dependency>
- スタートアップクラスを記述し、 @EnableEurekaServer アノテーションを追加します
- application.yml ファイルを追加し、次の構成を記述します。
server:
port: 10086
spring:
application:
name: eurekaserver
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
まとめ:
エウレカサーバーを構築する
- eureka-server 依存関係を導入する
- @EnableEurekaServer アノテーションを追加
- application.ymlでeurekaアドレスを設定します。
サービス登録
ユーザーサービスを登録する
ユーザーサービスを EurekaServer に登録する手順は次のとおりです。
- ユーザーサービスプロジェクトに spring-cscloud-starter-netflix-eureka-client 依存関係を導入する
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cscloud-starter-netflix-eureka-client</artifactId>
</dependency>
- application.yml ファイルに、次の構成を記述します。
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
まとめ:
1. サービス登録
- eureka クライアント依存関係を導入する
- applicaiton.ymlにエウレカアドレスを設定する
2. コンシューマでもプロバイダでも、eureeka-client 依存関係を導入し、eureka アドレスを知った後、サービス登録を完了できます。
サービスディスカバリ
完全なサービスプルインオーダーサービス
サービス プルとは、サービス名に基づいてサービス リストを取得し、サービス リストに対して負荷分散を実行することです。
- OrderService のコードを変更し、アクセスする URL パスを変更し、IP とポートの代わりにサービス名を使用します。
String url = "http://userservice/user/" + order.getUserId();
- order-service プロジェクトのスタートアップ クラス OrderApplication の RestTemplate に負荷分散アノテーションを追加します。
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
OrderApplication.java
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class);
}
//创建RestTemplate并注入Spring容器
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
オーダーサービス.java
@Service
public class OrderService () {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
//1.查询订单
Order order = orderMapper.findById(orderId);
//2.利用RestTemplate发起http请求,查询用户
//2.1.url路径
String url = "http://userService/user/" + order.getUserId();
//2.2.发送http请求,实现远程调用
User user = restTemplate.getForObject(url, User.class);
//3.封装user到Order
order.setUser(user);
//4.返回
return order;
}
}
要約する
1.エウレカサーバーの構築
- eureka-server 依存関係を導入する
- @EnableEurekaServer アノテーションを追加
- application.ymlでeurekaアドレスを設定します。
2. サービス登録
- eureka クライアント依存関係を導入する
- application.ymlでeurekaアドレスを設定します。
3. サービスディスカバリ
- eureka クライアント依存関係を導入する
- application.ymlでeurekaアドレスを設定します。
- @LoadBalanced アノテーションを RestTemplate に追加
- サービスプロバイダーのサービス名によるリモート呼び出し