マイクロサービス学習ノート -- (ユリイカ)

プロバイダーと消費者

サービス プロバイダー: ビジネス内の他のマイクロサービスによって呼び出されるサービス。(他のマイクロサービスへのインターフェイスを提供する)
サービス コンシューマー: 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 サービスを構築する

  1. 登録センターの構築: EurekaServer の構築
  2. サービス登録: ユーザーサービスとオーダーサービスをエウレカに登録します
  3. サービス検出: オーダーサービスでサービスのプルを完了し、負荷分散を通じてサービスを選択してリモート呼び出しを実現します。

エウレカサーバーを構築する

EurekaServer サービスを構築する手順は次のとおりです。

  1. プロジェクトを作成し、spring-cscloud-starter-netflix-eureka-server の依存関係を導入する
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cscloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. スタートアップクラスを記述し、 @EnableEurekaServer アノテーションを追加します
  2. 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 に登録する手順は次のとおりです。

  1. ユーザーサービスプロジェクトに spring-cscloud-starter-netflix-eureka-client 依存関係を導入する
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cscloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 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 アドレスを知った後、サービス登録を完了できます。


サービスディスカバリ

完全なサービスプルインオーダーサービス

サービス プルとは、サービス名に基づいてサービス リストを取得し、サービス リストに対して負荷分散を実行することです。

  1. OrderService のコードを変更し、アクセスする URL パスを変更し、IP とポートの代わりにサービス名を使用します。
String url = "http://userservice/user/" + order.getUserId();
  1. 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 に追加
  • サービスプロバイダーのサービス名によるリモート呼び出し

おすすめ

転載: blog.csdn.net/weixin_42594143/article/details/130406076