Articles

Netflix Eurekaを使用したSpring Cloud Service Discovery

Netflix Eureka registry server上でspring cloudに基づいたマイクロサービスを作成する方法と、他のマイクロサービス(EurekaクライSpring BootベースのSpring Cloud APIを使用します。 Netflix Eureka serverを使用して、SERVICE registry serverとEUREKAクライアントを構築し、自分自身を登録し、REST Apiを呼び出すための他のサービスを発見します。

概要

このNetflix Eurekaの例では、3つのマイクロサービスを作成します。

  1. Eureka Service Registry Server–このマイクロサービスは、サービスレジストリと検出サーバーを提供します。
  2. Student Microservice–Studentエンティティに基づいていくつかの機能を提供します。 これはrestベースのサービスであり、最も重要なのはeurekaクライアントサービスであり、サービスレジストリに登録するためにeurekaサービスと通信します。
  3. 学校Microservice–学生サービスと同じタイプ–のみ追加された機能は、サービスルックアップメカニズムで学生サービスを呼び出すことです。 私たちは、そのサービスと対話するために学生サービスの絶対URLを使用しません。

ここでは、上記の三つのサービス間の相互作用図です。

互いにコンポーネントの相互作用

テックスタックとランタイム

  • Java1。8
  • Eclipse IDE
  • Spring cloud
  • Spring boot
  • Spring Rest
  • Maven
Table of ContentsWhat is Netflix Eureka Server and Clients?Eureka Service Registry ServerEureka Client - Student ServiceEureka Client - School ServiceDemo of Service Discovery and CallingThings to check if facing any errorSummary

Netflix Eurekaサーバーとクライアントとは何ですか?

最近知っているように、マイクロサービスの周りには多くの勢いがあります。 モノリシックからマイクロサービスベースのアーキテクチャへの移行は、保守性、スケーラビリティ、高可用性などの面で将来のために多くの利点を しかし同時に、この移行を行っている間にも多くの課題があります。 そのうちの1つは、個々のマイクロサービスアドレスを維持することです。 このタスクは、サービスの数とその動的な性質に応じて、非常に複雑になる可能性があります。 インフラストラクチャ全体が分散され、レプリケーションもいくつか存在する場合、このサービスアドレスを維持することは困難になります。

これを解決するために、分散コンピューティングでは、一つの専用サーバーが展開され、削除されたすべてのMicroserviceのレジストリを維持するために責任があ これは、他のすべてのアプリケーション/マイクロサービスの電話帳のように機能します。

マイクロサービス(クライアント)が自分自身を登録し、他の登録されたマイクロサービスを発見できるルックアップサービスと考えてください。 クライアントマイクロサービスがEurekaに登録すると、ホスト、ポート、ヘルスインジケータなどのメタデータが提供され、他のマイクロサービスがそれを発見 検出サーバーは、各microserviceインスタンスからの定期的なハートビートメッセージを期待しています。 インスタンスが一貫してハートビートの送信に失敗し始めると、検出サーバーはそのインスタンスをレジストリから削除します。 このようにして、私たちはお互いに協力するマイクロサービスの非常に安定したエコシステムを持ち、その上に、スケールアップ/ダウンが非常に頻繁に、オンデマンドで、私たちはクラウド環境で特別にサービスをホストするために仮想ホストを使用する場合、手動で他のマイクロサービスのアドレスを維持する必要はありません。

Eureka Service Registry Server

Eureka serverを作成して実行するには、次の手順に従います。2つの依存関係を持つSpring Boot初期化子ポータルからSpring bootプロジェクトを作成します。 Eureka serverActuator。 他のmaven GAV座標を与え、プロジェクトをダウンロードします。 P>プロジェクトを解凍し、既存のmavenプロジェクトとしてEclipseにインポートします。

Eureka Server Serviceプロジ このステップでは、必要なすべての依存関係がmavenリポジトリからダウンロードされます。ダウンロードしたプロジェクトでspringが既に生成しているクラスを開き、クラスに@EnableEurekaServer@EnableEurekaServer p>

package com.example.howtodoinjava.springeurekaserver; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer@SpringBootApplicationpublic class SpringEurekaServerApplication { public static void main(String args) { SpringApplication.run(SpringEurekaServerApplication.class, args); }}

もう一度プロジェクトをビルドします。 このアノテーションを使用すると、このアーティファクトはmicroservice registryおよびdiscovery serverのように動作します。

サーバー構成

application.ymlsrc\main\resourcesディレクトリに作成します。 これらのプロパティを追加します–

server: port: ${PORT:8761} # Indicate the default PORT where this service will be startedeureka: client: registerWithEureka: false#telling the server not to register himself in the service registry fetchRegistry: false server: waitTimeInMsWhenSyncEmpty: 0#wait time for subsequent sync

bootstrap.ymlsrc\main\resourcessrc\main\resourcesという別のファイルを作成します。 これらのプロパティを追加します–

spring: application: name: eureka cloud: config: uri: ${CONFIG_SERVER_URL:http://localhost:8888}

Test Eureka Server

spring bootアプリケーションとしてアプリケーションを起動します。 ブラウザを開き、に移動すると、以下のようなeurekaサーバーのホームページが表示されます。

任意のクライアントなしユーレカコンソール

この時点では、サービスが期待されているここに登録されていないことに注意してください。

Eureka Client–Student Service

student serviceを実行しているEureka clientを作成して実行するには、次の手順に従います。4つの依存関係、つまりActuatorWebRest RepositoriesEureka Discoveryを持つ初期化 他のmaven GAV座標を与え、プロジェクトをダウンロードします。 P>

クライアントプロジェクトの生成–
学生Microservice

解凍し、既存のmavenプロジェクトとしてeclipseにプロジェここで、srcフォルダーに存在するSpring bootアプリケーションクラスの@EnableEurekaClient注釈を追加します。 この注釈を使用すると、このアーティファクトはspring discoveryクライアントのように機能し、このサービスに接続されたeurekaサーバーに自分自身を登録します。P>

package com.example.howtodoinjava.springeurekaclientstudentservice; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication@EnableEurekaClientpublic class SpringEurekaClientStudentServiceApplication { public static void main(String args) { SpringApplication.run(SpringEurekaClientStudentServiceApplication.class, args); }}

クライアント構成

application.ymlsrc\main\resourcesディレクトリに作成し、以下の行を追加します。P>

server: port: 8098#default port where the service will be startedeureka:#tells about the Eureka server details and its refresh time instance: leaseRenewalIntervalInSeconds: 1 leaseExpirationDurationInSeconds: 2 client: serviceUrl: defaultZone: http://127.0.0.1:8761/eureka/ healthcheck: enabled: true lease: duration: 5spring: application: name: student-service #current service name to be used by the eureka server management: security: enabled: false#disable the spring security on the management endpoints like /env, /refresh etc. logging: level: com.example.howtodoinjava: DEBUG

REST APIを追加

次に、RestControllerを追加し、特定の学校のすべての学生の詳細を取得するためのrestエンドポイントを1つ公開します。 ここでは、ビジネス目的を果たすために/getStudentDetailsForSchool/{schoolname}エンドポイントを公開しています。 簡単にするために、私たちは学生の詳細をハードコーディングしています。p>

Studentクラスは単純なPOJOです。テストEurekaクライアント

このプロジェクトをspring bootアプリケーションとして起動します。 このサービスがEureka serverに自動的に登録されていることを確認します。 Eurekaサービスコンソールに移動し、ページを更新します。 すべてがうまくいけば、eurekaサービスコンソールにstudent-serviceのエントリが1つ表示されます。 これは、Eurekaサーバーとクライアントの両方が互いに認識していることを示します。

学生サービスが登録されたEurekaコンソール

/getStudentDetailsForSchool/{schoolname}abcschool

学生サービス応答

Eurekaクライアント–学校サービス

今、私たちはeurekaサーバーに自分自身を登録ハードコードされたurlパス。

同様に学校のサービスを実行しているEurekaクライアントを作成して実行するには、学生サービスを作成するための正確な手順に従ってくださ4つの依存関係、つまりActuatorWebRest RepositoriesEureka Discoveryを持つ初期化 他のmaven GAV座標を与え、プロジェクトをダウンロードします。 プロジェクトを解凍し、既存のmavenプロジェクトとしてEclipseにインポートします。ここで、srcフォルダーに存在するSpring bootアプリケーションクラスの@EnableEurekaClient注釈を追加します。 この注釈を使用すると、このアーティファクトはspring discoveryクライアントのように機能し、このサービスに接続されたeurekaサーバーに自分自身を登録します。P>

package com.example.howtodoinjava.springeurekaclientschoolservice;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication@EnableEurekaClientpublic class SpringEurekaClientSchoolServiceApplication {public static void main(String args) {SpringApplication.run(SpringEurekaClientSchoolServiceApplication.class, args);}}

クライアント構成

application.ymlsrc\main\resourcesディレクトリに作成し、以下の行を追加します。 これらの設定は、ポート番号とサービス名を除いて、studentサービスと非常によく似ています。

student serviceのREST APIを使用するREST APIを追加します

今すぐ1つを追加しますRestControllerそして学校の詳細を取得するための1つのrestエンドポイントを公開します。 このエンドポイントは、アプリケーション名を使用してサービス検出スタイルのURLを使用し、代わりにhost:portの完全なURLを使用します。 このようにして、特定のサービス構成を取り除くことができ、ここで提供されているeurekaサーバーとrestテンプレートにサービス検索の責任を与えることができま 複数のインスタンスが同じサービスで実行されている場合は、ここで負荷分散を適用することもできます(@LoadBalanced注釈を参照)。私たちが使用したURLはhost:portstudent-serviceのみを使用しています。 これは、spring framework、eureka server、およびrest templateによって内部的に処理されます。

サービスの検出と呼び出しのデモ

今だけでなく、学校のサービスを開始します。 3つのサービスがすべて開始されます。 Eurekaサーバーコンソールを確認します。 Bothe学生と学校のサービスはそこに登録する必要があります。

両方のサービスが登録されたユーレカコンソール

ブラウザに移動し、http://localhost:9098//getSchoolDetails/abcschool、それは特定の学校abcschoolの詳細。 私たちは内部的に学生サービスを呼び出しました。 応答はブラウザで次のようになります。

学校サービスの応答

エラーに直面しているかどうかを確認するもの

  1. 注釈

エラーに直面しているかどうかを確認するもの

  1. 注釈
    学校サービスの応答

    @EnableEurekaServer@EnableEurekaClientは、アプリケーションエコシステムの中心です。 これら二つのことがなければ全く動作しません。

  2. config clientサービスの起動時に、eureka serverサービスがすでに実行されていることを確認してください。

概要

サービスレジストリと検出サーバーだけでなく、クライアントを効率的に展開することがいかに簡単かを見ました。 Spring frameworkは内部的に多くのことを維持しています。 ここでは、いくつかの注釈と非常に最小限の構成を使用して、全体を迅速に達成しています。