スプリングクラウドのサービス登録と発見(Eureka)


Eurekaを使ってサービス治理を実現します。
役割:サービス治理(サービス登録と発見)の実現
Spring Cloud EurekaはSpring Cloud Netflixプロジェクト下のサービス整備モジュールです。Spring Cloud NetflixプロジェクトはSpring Cloudのサブプロジェクトの一つであり、主な内容はNetflixの一連のオープンソース製品の包装であり、Spring Bootアプリケーションのための設定されたNetflix OSS統合を提供しています。いくつかの簡単な注釈によって、開発者は迅速に応用モジュールを配置し、巨大な分散システムを構築することができます。主に提供されるモジュールは、サービス発見、ブレーカ(Hystrix)、インテリジェントルーティング(Zuul)、クライアント負荷バランス(Ribbon)などがあります。
プロジェクトの実戦:
サービス登録センター:eurka-server
役割:サービス登録センターはサービス登録機能を提供します。
サービス提供者:eurka-client
役割:登録サービスはサービス登録センターに行きます。
サービス登録センター:eurka-server
新しいspringboot項目:eurka-server、そのpom.xmlの構成は以下の通りです。

 <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
   <java.version>1.8</java.version>
  </properties>
  <dependencies>
   <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka-server</artifactId>
   </dependency>
  </dependencies>
  <dependencyManagement>
   <dependencies>
    <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-dependencies</artifactId>
     <version>Dalston.SR1</version>
     <type>pom</type>
     <scope>import</scope>
    </dependency>
   </dependencies>
  </dependencyManagement>
サービス登録センターの機能を実現するには非常に簡単です。プロジェクトの起動タイプEurekaServer Aplicationに@EnbaleEurekaServerを使って注解すればいいです。

 @EnableEurekaServer
 @SpringBootApplication
 public class EurekaServerApplication{
 
  public static void main(String[] args) {
   new SpringApplicationBuilder(EurekaServerApplication.class)
      .web(true).run(args);
  }
 }
デフォルトでは、このサービス登録センターも自分をクライアントとして登録しようとしますので、クライアントの登録行為を無効にする必要があります。appication.properties設定ファイルに以下のような情報を追加する必要があります。

spring.application.name=eureka-server
server.port=1001
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
EurekaServerAplicationを起動して、アクセスします。http://localhost:9001/Eurekaのページが見られます。赤いボックスの位置からは、タスクサービスのインスタンスなしで現在のサービス登録センターに登録されています。
 
サービス提供者:eurka-client
各インスタンスが登録された後、登録センターにときめきを送信する必要があります。Cientがserverに登録すると、ホストとポート、URL、ホームページなどのメタデータが提供されます。Eureka serverは、各clientインスタンスから心拍メッセージを受信する。ときめきがタイムアウトした場合、このインスタンスは通常登録serverから削除される。
新しいsprigboot項目:eurka-clientのpom.xmlの構成は以下の通りです。

 <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
   <java.version>1.8</java.version>
  </properties>
  <dependencies>
   <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
   </dependency>
   <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
  </dependencies>
  <dependencyManagement>
   <dependencies>
    <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-dependencies</artifactId>
     <version>Dalston.SR1</version>
     <type>pom</type>
     <scope>import</scope>
    </dependency>
   </dependencies>
  </dependencyManagement>
サービス提供者を実現するのも簡単です。プロジェクトのスタートクラスEurekaClientAplicationで@EnbaleEurekaClientコメントを使えばいいです。

 @EnableEurekaClient
 @SpringBootApplication
 public class EurekaClientApplication {
 
  public static void main(String[] args) {
    new SpringApplicationBuilder(
      EurekaClientApplication.class)
     .web(true).run(args);
   }
 }
appication.propertiesでは、以下のように構成されています。

spring.application.name=eureka-client
server.port=9002
eureka.client.serviceUrl.defaultZone=http://localhost:9001/eureka/
spring.appication.name属性を通じて、私たちはマイクロサービスの名前を指定して、呼び出し時にこの名前を使うだけでサービスへのアクセスができます。
eurca.client.serviceUrl.defaultZone属性対応サービス登録センターの配置内容は、サービス登録センターの位置を指定します。
server.port属性を使用して異なるポートを設定します。
EurekaClientAplicationクラスを起動します。
更新http://localhost:9001/サービス提供者はすでにサービス登録センターに登録されているのが見えます。
 
新しいDiscoveryControllerで
discoveryClievent.get Services()を使って登録されたサービス名を取得し、@valueを使ってプロファイルの情報をipに割り当てます。

@RestController
public class DiscoveryController {
 
 @Autowired
 private DiscoveryClient discoveryClient;
 @Value("${server.port}")
 private String ip;
 
 @GetMapping("/client")
 public String client() {
  String services = "Services: " + discoveryClient.getServices()+" ip :"+ip;
  
  System.out.println(services);
  return services;
 }
}
アクセス:http://localhost:9002/client
 
最後に、@EnbleEurekaClientと@EnbleDiscoveryClientの二つの注釈を説明します。
まず、この二つの注釈はサービス発見の機能を実現することができます。spring cloudでdiscovery serviceは多くの種類の実現があります。
@EnbaleEurekaClientはspring-cloud-netflixに基づいています。サービスはeurekaを登録センターとして採用しています。使用シーンは単一です。
@EnbleDisccoveryClientはspring-cloud-comonsに基づいています。サービスは他の登録センターを採用しています。
GitHub:https://github.com/mingyuHub/springcloud
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。