04 - Eureka 登録センターの役割、具体的な構成、サービス登録とサービス検出についての詳細な説明

エウレカ登録センターの役割

Eureka架构

リモート通話に関する 2 つの問題

  • 服务的ip地址和端口号写死: 運用環境服务的地址可能会随时发生变化でハードコーディングされている場合、コードを毎回変更する必要があります
  • 多实例问题: 同時実行性が高い場合一个服务可以有多个实例形成一个集群、この時点でハードコーディングが使用されている場合、アクセスできるサービスのインスタンス アドレスは 1 つだけです。

Eureka アーキテクチャでは、マイクロサービスの役割はEurekaServer和EurekaClient2 つのカテゴリに分類されます。

  • EurekaServer(服务端): サービス登録情報 (サービス名および関連するインスタンス アドレスを含む) を記録し、すべてのサービスのハートビートを監視できます。
  • EurekaClient(客户端):プロバイダー(サービス提供者)とコンシューマー(サービス利用者)
    ここに画像の説明を挿入します

服务提供者与消费者

サービス呼び出し関係には、サービス プロバイダーとサービス コンシューマが含まれますが、これら 2 つの役割の定義は絶対的なものではありません。在不同业务中有些服务既可以是服务提供者也可以是服务消费者

  • 服务提供者: ビジネス内の他のマイクロサービスによって呼び出されるサービス (他のマイクロサービスに公開されたインターフェイス)
  • 服务消费者: ビジネス内の他のマイクロサービスのサービスの呼び出し (他のマイクロサービスが提供するインターフェイスの呼び出し)

服务消费者リモート通話を開始するときは、服务提供者实例的ip地址和端口号 のプロセスを決定服务消费者也需要把自己注册到Eureka服务端后才能使用其提供的服务

  • 第一步服务注册: サービス プロバイダー インスタンスが開始されると、独自の情報がサービス プロバイダー インスタンスに登録されます。eureka-server(Eureka服务端)
  • 第二步服务映射:Eureka サーバーは、すべてのサービスによって提供される名前と、それに対応するサービス インスタンス アドレスの間のマッピング関係を Map コレクションに保存します。
  • 第三步服务发现: サービス利用者は、サービスプロバイダーの名前に基づいて eureka から対応する情報を取得します。一个服务可能有多个服务提供者所以最终会得到一个服务实例地址列表
  • 第四步负载均衡: サービス コンシューマは、負荷分散アルゴリズムを使用してインスタンス アドレス リストからインスタンス アドレスを選択し、リモート呼び出しを開始します。

サービス利用者はサービス提供者の健康状態をどのように認識しているのでしょうか?判断服务提供者是否宕机

  • 第一步: サービス プロバイダーは、定期的な間隔 (デフォルトは 30 秒) で EurekaServer サーバーにハートビート リクエストを送信し、その健全性ステータスを報告します。
  • 第二步:eureka は、ハートビートリクエストをチェックしてサービスプロバイダのリスト情報を更新し、異常なハートビートが発見された場合はサービスリストから削除することで、サービスコンシューマがサービスプロバイダの最新情報を取得できるようにします。

Eureka 登録センターを構成する

搭建注册中心(EurekaServer)

最初のステップは、サブモジュールを作成することです:在父工程cloud-demo中创建子模块eureka-server、次に SpringCloud for Eureka によって提供されるスターター サーバーの依存関係を導入します

<!--eureka服务端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2 番目のステップは、スタートアップ クラスを作成することです。eureka-server模块 にスタートアップ クラスを作成し、@EnableEurekaServer注解 を追加します。 3> 登録センターとしての機能を持つeureka-server服务

  • eureka-server サービスを含むすべてのマイクロサービスは、登録センターに移動して、独自の情報 (サービス名と関連するインスタンス アドレスを含む) を登録します。
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(EurekaApplication.class);
    }
}

3 番目のステップは、構成ファイルを作成することです。eureka-server服务 の eureka-server サービスに独自のサービス名と関連するインスタンス アドレス情報を登録して、他の eureka クラスタとの通信を容易にします。 Communication< /span>

server:
  port: 10086 # 服务端口
spring:
  application:
    name: eureka-server # eureka的服务名称
# eureka服务将自己的信息注册到Eureka服务端    
eureka:
  client:
    service-url: # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

ステップ 4: マイクロサービスを開始し、ブラウザで http://localhost:10086/ にアクセスします。

ここに画像の説明を挿入します

服务注册

最初のステップは依存関係を導入することです。user-service,order-service模块 の pom.xml ファイルに Eureka のクライアント依存関係を導入します。spring-cloud-starter-netflix-eureka-client

<!--eureka客户端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

サービス登録の 2 番目のステップ: user-service,order-service模块 の application.yml で 自己的服务的名称 と を構成します。eureka-server服务的地址信息

spring:
  application:
    name: userservice # 服务名称
# userservice服务将自己的信息注册到Eureka服务端      
eureka:
  client:
    service-url: # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka       
        
spring:
  application:
    name: orderservice # 服务名称
# orderservice将自己的信息注册到Eureka服务端    
eureka:
  client:
    service-url: # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

3 番目のステップでは、マルチインスタンス展開をシミュレートします。IDEA の 起動user-service实例 構成のコピーをコピーし、名前をリセットし、VM オプションを使用してポート番号を変更します。-Dserver.port=8082

ここに画像の説明を挿入します

ステップ 4: Eureka サーバーに登録されているサービスとすべての関連インスタンスを表示する

ここに画像の説明を挿入します

サービスコール

服务发现

最初のステップは依存関係を導入することです: サービス検出とサービス登録はすべて Eureka のクライアント依存関係にカプセル化されています。登録中に依存関係が導入された場合は、再度導入する必要はありません。

<!--eureka客户端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

サービス検出の 2 番目のステップ:orderservice服务eureka-server服务 に登録されている限り、< のインスタンス アドレス リストを取得できます。 a i=3> userservice服务

  • orderservice模块 の起動クラスに登録されている RestTemplate Bean に負荷分散アノテーションを追加します。@LoadBalanced
  • リモート呼び出しのアクセス パス内order-service模块OrderService类中的queryOrderById方法使用服务名(userservice)代替服务实例的ip和端口
  • Spring は、サービス名に基づいて Eureka サーバーから対応するインスタンス アドレス リストを自動的に取得するのに役立ちますuserservice。その後、負荷分散アルゴリズムを使用してインスタンス アドレスを選択し、リモート通話
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(OrderApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
    
    
        return new RestTemplate();
    }
}
public Order queryOrderById(Long orderId) {
    
    
    // 1.查询订单
    Order order = orderMapper.findById(orderId);
    // 2.调用userservice服务远程查询User,使用服务的名称代替服务的IP地址和端口
    //String url = "http://localhost:8081/user/" + order.getUserId();
    String url = "http://userservice/user/" + order.getUserId();
    User user = restTemplate.getForObject(url, User.class);
    // 3.存入查询到的user对象
    order.setUser(user);
    // 4.返回
    return order;
}

おすすめ

転載: blog.csdn.net/qq_57005976/article/details/134905271
おすすめ