Spring Cloud Eureka:サービスの登録と発見
Eurekaは、サービスの登録と検出を提供するオープンソースのNetflix製品であり、サービスレジストリとサービス検出の完全な実装を提供します。また、SpringCloudシステムで最も重要でコアなコンポーネントの1つです。
背景紹介
マイクロサービスは独立してデプロイされ、明確な境界があり、複雑なビジネス機能はサービス間のリモート呼び出しを通じて構築されます。
では、なぜサービスの登録と検出を参照する必要があるのでしょうか。サービスの登録と検出のために解決すべき具体的な問題は何ですか?
サービスの登録と検出は、主に次の2つの重要な問題を解決します。
- 1)サービス間の相互依存の詳細をシールドおよび分離します。
- サービス間のリモートコールは、互いのIPおよびポート情報を知っている必要があることを私たちは知っています。発信者のIPとポートを直接設定できます。このように、発信者はIPに直接依存し、ポートには明らかな問題があります。たとえば、着信IPとポートを変更した後、発信方法を同期的に変更する必要があります。
- サービス検出により、サービス間のIPとポートの依存関係がサービス名の依存関係に変換されます。サービス名はマイクロサービスビジネスに応じて識別できます。したがって、シールドサービスとデカップリングサービス間の依存関係の詳細は、サービス検出と登録解決です。最初の質問。
- 2)マイクロサービスの動的管理:
- マイクロサービスアーキテクチャには多くのサービスがあり、サービス間の相互依存性も複雑です。サービスがアクティブに停止するか、予期せずハングするか、トラフィックの増加によってサービス実装が拡張されるかにかかわらず、サービスデータまたはステータスの動的な変更が必要です。被呼者にはできるだけ早く通知され、その後、被呼者は対応する措置を講じます。したがって、サービスの登録と検出では、オンラインでのサービス登録、オフラインでのサービスのアクティブ化、異常なサービスの削除など、サービスのデータとステータスをリアルタイムで管理する必要があります。
ユーレカ入門
Spring Cloudは、サービスの登録と検出を実装するためにNetflixによって開発されたEurekaモジュールをカプセル化します。EurekaはCSの設計アーキテクチャを採用しています。
- ユーレカサーバーはサービス登録機能のサーバーであり、サービス登録センターです。システム内の他のマイクロサービスは、Eurekaのクライアントを使用してEurekaサーバーに接続し、ハートビート接続を維持します。
- 保守担当者は、Eurekaサーバーを使用して、システム内の各マイクロサービスが正常に動作しているかどうかを監視できます。
- Spring Cloudの他のいくつかのモジュール(Zuulなど)は、Eurekaサーバーを使用して、システム内の他のマイクロサービスを検出し、関連するロジックを実行できます。
- Eurekaは、EurekaサーバーとEurekaクライアントの2つのコンポーネントで構成されています。Eurekaサーバーはサービス登録サーバーとして使用されます。
- Eurekaの基本構造は、次の3つの役割で構成されています。
- 1. Eurekaサーバー:サービスの登録と検出を提供します
- 2.サービスプロバイダー:サービスプロバイダーは、他のサービスを見つけることができるように、独自のサービスをEurekaに登録します。
- 3.サービス利用者:サービス利用者は、Eurekaから登録済みサービスのリストを取得し、サービスを利用できるようにします。
ユーレカ登録センターを建設する
Eurekaレジストリを作成して実行し、IDEAでSpringCloudアプリケーションを作成して実行するための正しい姿勢を確認しましょう。
- 開発ツールのアイデア
- Javaバージョン1.8
- SpringBootバージョン2.3.1.RELEASE
- SpringCloudバージョンHoxton.SR6
IDEAを使用してSpringCloudアプリケーションを作成する
-
クラウド学習プロジェクトの作成を学習するのに便利であり、ソースコードは将来GitHubに配置されます。
- このプロセスを図に示します。
-
作成したばかりのプロジェクトで、eureka-learnモジュールを作成し、SpringInitializerを使用してSpringBootプロジェクトを初期化します。
- このプロセスを図に示します。
-
eureka-learnモジュールのpom.xmlファイルを開くと、追加のeureka-server依存関係があることがわかります。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
-
@EnableEurekaServerアノテーションをスタートアップクラスに追加するだけで、eurekaレジストリの機能が有効になります
@EnableEurekaServer @SpringBootApplication public class EurekaServiceApplication { public static void main(String[] args) { SpringApplication.run(EurekaServiceApplication.class, args); } }
-
構成ファイルapplication.ymlを変更し、eurekaレジストリの関連する構成を追加します
server: port: 8001 #指定运行端口 spring: application: name: eureka-server #指定服务名称 eureka: instance: hostname: localhost #指定主机地址 client: fetch-registry: false #指定是否要从注册中心获取服务(注册中心不需要开启) register-with-eureka: false #指定是否要注册到注册中心(注册中心不需要开启) server: enable-self-preservation: false #关闭保护模式
-
操作が完了したら、アドレスhttp:// localhost:8001 /にアクセスして、Eurekaレジストリのインターフェイスを確認します。
- 写真が示すように:
Eurekaクライアントサービスを構築する
-
プロジェクトに新しいeureka-clientモジュールを作成し、pom.xmlに次の依存関係を追加します
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
@EnableDiscoveryClientアノテーションをスタートアップクラスに追加すると、それがEurekaクライアントであることを示します
@EnableDiscoveryClient @SpringBootApplication public class EurekaServiceClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaServiceClientApplication.class, args); } }
-
Eurekaクライアントの関連する構成を構成ファイルapplication.ymlに追加します
server: port: 8101 #运行端口号 spring: application: name: eureka-client #服务名称 eureka: client: register-with-eureka: true #注册到Eureka的注册中心 fetch-registry: true #获取注册实例列表 service-url: defaultZone: http://localhost:8001/eureka/ #配置注册中心地址
-
登録センターhttp:// localhost:8001 /を確認し、Eurekaクライアントが正常に登録されていることを確認します
- 写真が示すように:
認定を受けたEurekaレジストリを構築する
-
eureka-security-serverモジュールを作成し、pom.xmlに次の依存関係を追加します
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
-
application.yml構成ファイルを変更します
server: port: 8004 spring: application: name: eureka-security-server security: #配置SpringSecurity登录用户名和密码 user: name: peter password: 20200314 eureka: instance: hostname: localhost client: fetch-registry: false register-with-eureka: false
-
Spring-Security依存関係が導入されたため、Java構成WebSecurityConfigを追加する必要があります
@EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().ignoringAntMatchers("/eureka/**"); super.configure(http); } }
-
eureka-security-serverを実行し、http:// localhost:8004にアクセスして、ログイン認証が必要であることを確認します
- 写真が示すように
Eureka-クライアントはログイン認証で登録センターに登録します
-
レジストリのアドレス形式は、構成ファイルで変更する必要があります
http://${ username}:${ password}@${ hostname}:${ port}/eureka/
-
application-security.yml構成ファイルを追加し、形式に従ってユーザー名とパスワードを変更します
server: port: 8103 spring: application: name: eureka-client eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://peter:20200314@localhost:8004/eureka/
Eurekaの一般的な構成について
-
構成は次のとおりです。
eureka: client: #eureka客户端配置 register-with-eureka: true #是否将自己注册到eureka服务端上去 fetch-registry: true #是否获取eureka服务端上注册的服务列表 service-url: defaultZone: http://localhost:8001/eureka/ # 指定注册中心地址 enabled: true # 启用eureka客户端 registry-fetch-interval-seconds: 30 #定义去eureka服务端获取服务列表的时间间隔 instance: #eureka客户端实例配置 lease-renewal-interval-in-seconds: 30 #定义服务多久去注册中心续约 lease-expiration-duration-in-seconds: 90 #定义服务多久不去续约认为服务失效 metadata-map: zone: jiangsu #所在区域 hostname: localhost #服务主机名称 prefer-ip-address: false #是否优先使用ip来作为主机名 server: #eureka服务端配置 enable-self-preservation: false #关闭eureka服务端的保护机制