ServiceDiscovery - eureka


Service Discovery


msaは、複数のサービス間の呼び出しから構成される。


通常はIPとポートで呼び出されますが、クラウド環境ではIPが常に動的に変化するため、有効な位置を知る機能が必要です。


必要なサービスを提供する仕事はサービス部門が責任を負う。


Spring Cloud Netflix Eureka


Netflix社は独自のクラウドテクノロジーを寄付しました
1.ユーリカードサーバにサービスを登録する
2.クライアント要求ロードバランサ(APIゲートウェイ)に必要な情報
3.サービス部門が要求した情報の検索

プロジェクトの作成


ユリカはクライアントとサーバの2つの部分から構成されています.

サーバー


依存項目の追加
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
他のサービスと通信できるレジストリの確立
    @SpringBootApplication
    @EnableEurekaServer
    public class DiscoveryserviceApplication {

        public static void main(String[] args) {
            SpringApplication.run(DiscoveryserviceApplication.class, args);
        }

    }
application.yml
server:
port: 8761

spring:
application:
    name: discoveryservice

eureka:
client:
    register-with-eureka: false
    fetch-registry: false

クライアント

  • は、自身をユリカサーバに登録し、ホスト、ポート、ステータス情報、URL、ホームページURLを送信する.
  • ユリカサーバは、各サービスからの生存信号情報
  • を受信する.
  • の設定中に生存信号が送信されない場合、サービスは
  • 削除される.
  • サーバからデータを取得してキャッシュし、変更を定期的に確認
    依存項目の追加
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    @EnableDiscoveryClientはspring-cloud-comonsに存在します.
    @EnableEurekaClientはspring-cloud-netflixに存在し、ユリカのみで実行されます.
    @SpringBootApplication
    @EnableDiscoveryClient
    public class UserServiceApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(UserServiceApplication.class, args);
        }
    
    }
    application.yml
    server:
    port: 0
    spring:
    application:
        name: user_service
    
    eureka:
    instance:
        instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
    client:
        register-with-eureka: true
        fetch-registry: true
        service-url:
        defaultZone: http://127.0.0.1:8761/eureka
    .ymlファイルは登録でより詳細に議論されます.

    登録


    複数のサービスが登録されている場合、ポート競合のリスクにより正常に動作しません.
    いろいろな方法を提案し,より良い解決策を探し出す.
    1. .ymlファイルのポート番号の変更->毎回変更できません
    2.edit configurationの使用
    -Dserver.port=9002
    3.端末にポート番号を設定する
    mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003'

  • ≪ランダム割当てポート番号|Random Allocation Port Number|Eas≫-ランダム・ポート
       server:
       port: 0
    
       spring:
       application:
           name: user_service
    
       eureka:
       instance:
           instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
  •