はじめに
Spring Cloudマイクロサービスは、現在のインターネットアプリケーション開発における主要なトレンドとなっています。基本的には、単一のプロジェクトを複数の小さなモジュールに分割することで、プロジェクトの拡張性を高めることができます。EurekaはSpring Cloudのサービス登録と検出センターです。Spring Cloudの最初のコンポーネントとして、その主な役割はSpring Cloud内の相互に独立した各サービス間の呼び出しを担当します。
Eurekaは、ZookeeperとDubboの組み合わせのような役割を果たします。サービス提供者は自身が提供するサービスを登録センターに登録し、その後Eurekaは登録されたサービスを二重構造のMapに格納します。Eurekaは2つの主要コンポーネントで構成されています:eureka serverとeureka client。
Eureka ServerとEureka Clientの役割
Eureka Serverはサービス登録サービスを提供し、各ノードが起動するとEureka Serverに登録されます。これにより、Eureka Serverのサービス登録テーブルには利用可能なすべてのサービスノードの情報が格納され、これらの情報はインターフェースで直感的に確認できます。
Eureka ClientはJavaクライアントで、Eureka Serverとの相互作用を簡素化します。同時に、クライアントはラウンドロビン負荷アルゴリズムを使用したビルトインのロードバランサーでもあります。
Eureka Serverの作成
- 新しいプロジェクトを作成する際に、
Eureka Server依存関係を選択します - プロジェクトの起動クラスに
@EnableEurekaServerアノテーションを追加します。このアノテーションはEurekaServerMarkerConfigurationクラスをインポートし、このクラスはSpringコンテナにbeanを追加します。このアノテーションを追加すると、eureka serverはSpringコンテナと一緒に起動します。
@SpringBootApplication
@EnableEurekaServer
public class ServiceRegistryApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceRegistryApplication.class, args);
}
}
application.yml設定ファイルでEureka Serverの登録情報を構成します。
server:
port: 8761
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
register-with-eureka: false
上記の設定では、プロジェクトポートを8761に設定し、Eureka Serverが自身を登録しないように設定しています。
Eureka Clientの作成
- プロジェクトにEureka Client依存関係を追加します
- 起動クラスに
@EnableDiscoveryClientアノテーションを追加します。このアノテーションは@EnableEurekaServerと同様の役割を果たします。
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceClientApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceClientApplication.class, args);
}
}
application.yml設定ファイルで登録URLを構成します。
server:
port: 8080
spring:
application:
name: service-client
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
この設定では、クライアントアプリケーションのポートを8080に設定し、サービス名を「service-client」に設定しています。また、Eureka ServerのURLを指定しています。
自己保存メカニズム
Eurekaのコンソールページで、以下のような赤い文字の警告が表示されることがあります。
これはEurekaの自己保存メカニズムによる警告です。Eureka Serverは実行中に15分以内のハートビート失敗率が85%を下回るかどうかを統計し、もし下回る場合、Eureka Serverはこれらのインスタンスを保護し、期限切れにならないようにします。つまり、Eureka Serverが短時間で多くのクライアントを失った場合、Eurekaは自己保存モードに入り、登録されたサービス情報をすべて保護して削除しません。クライアントが再びEureka Serverに接続して登録されるまで、この状態が続きます。
開発環境では、Eureka Serverの自己保存メカニズムを無効にすることができます:
eureka:
server:
enable-self-preservation: false
ただし、本番環境では自己保存メカニズムを無効にすることは推奨されません。
まとめ
以上で、Eureka ServerとEureka Clientの基本的なセットアップが完了しました。主なポイントは、起動クラスに適切なアノテーションを追加し、設定ファイルで必要な構成を行うことです。Eurekaはマイクロサービスアーキテクチャにおいてサービスの検出と登録を容易にする強力なツールです。