Spring Cloud シリーズ: サービス登録および検出コンポーネント - Eureka (パート 2)

作者の他のプラットフォーム:

| CSDN:blog.csdn.net/qq_41153943

| ナゲッツ: juejin.cn/user/651387…

| 志湖: www.zhihu.com/people/1024…

| GitHub: github.com/JiangXia-10…

この記事は合計 3304 ワードあり、読むのにかかる時間は 9 分です

序文

前述したように、eureka コンポーネントは主に eureka サーバーと eureka クライアントの 2 つの部分で構成されます。eureka サーバー 前回の記事 SpringCloud シリーズ:サービス登録および検出コンポーネント - Eureka (パート 1) では、サービス登録センターとして eureka サーバーを開発する方法を紹介しました。今日は前回の記事でエウレカの勉強を続けた上で、エウレカクライアントを開発します。実際、ここでの eureka クライアントは事業分割に基づいたマイクロサービスです。

実践開発

この記事のプロジェクト基盤は前回のプロジェクト基盤をベースとしていますが、詳細はSpringCloud シリーズ サービスの登録と検出コンポーネント - Eureka (前編)を参照してください。そして、最終的なプロジェクトのソースコードはgithubに同期され、記事の最後にアドレスが記載されているので、ダウンロードして使用することができます。

まず、eurekaサーバーと同様に、クライアントアプリケーションとしてspringbootプロジェクトを作成する必要があります。プロジェクトの構造は次のとおりです。

写真

次に、springboot 関連の依存関係も導入する必要があります。

<dependencies>
        <dependency>
            <!--引入springboot相关依赖-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入spring-cloud-netflix-eureka-client依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
复制代码

次に、application.properties ファイルを追加し、関連する構成を追加します。

#指定服务端口
server.port=8081
#指定服务名称,唯一标识,服务名不能出现下划线,如果不指定名称,显示的就是unknown
spring.application.name=eurekaclient
#指定服务注册中心的地址,暴露服务地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
复制代码

次に、エントリ クラスを追加し、 @enableeurekaclient アノテーションを使用して、現在のアプリケーションがサービス登録用の eureka サーバー サービスに登録されたクライアントであることを示します。

@SpringBootApplication
//当前应用作为一个客户端进行服务注册
@EnableEurekaClient
public class SpringCloudEurekaClient {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaClient.class,args);
    }
}
复制代码

上記の手順は、いくつかの特定の内容の違いを除いて、基本的に eureka サーバー プロジェクトの作成プロセスと同じです。

次に、最初にサーバー プロジェクトを開始し、次にクライアント プロジェクトを順番に開始します。

写真

写真

ブラウザのアドレスバーに次のように入力します。

http://localhost:8761/
复制代码

EUREKACLIENT登録のインスタンスは、登録センター管理インターフェイスに表示され、 EUREKACLIENT が登録センターに登録されていることを示します。

写真

ただし、赤色のメッセージが表示されているので、どのようなセキュリティ プロンプト情報であるかを直感で判断できます。

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
复制代码

この文の翻訳された意味は次のとおりです。エウレカは、もはや存在しないインスタンスを宣言する可能性があります。更新数がしきい値未満の場合、安全上の理由から期限切れのインスタンスは削除されません。

ここで、Eureka のデフォルトのしきい値が85% であることを説明する必要があります。

つまり、たとえば、現在 10 個のマイクロサービスがあり、ハートビート応答があるのは 8 個だけである場合 (8/10=80%<85%)、Eureka は保護メカニズムをアクティブにし、期限切れのインスタンスはすぐには削除されません。緊急警告が表示されます。例えば、エウレカサーバーを構築する際、2台のエウレカサーバーを構築しましたが、自己登録は禁止されており、エウレカサーバー自体がサービスとしてカウントされるため、どのエウレカサーバーでもハートビートは1/2=50%しか取得できません。その後、この警告も表示されます。自己登録が無効になっていなかったら、この状況は発生しなかったでしょう。

この赤い警告を表示したくない場合は、サーバー側の application.properties ファイルで設定できます。

eureka.server.enable-self-preservation=false
复制代码

プロジェクトを開始すると、赤い警告が消えます。

写真

ただし、次の警告が表示されます。

THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
复制代码

したがって、公式は実稼働環境で自己保護メカニズムを無効にすることを推奨していません。

エウレカの自己防衛メカニズムとは何かについて話しましょう。デフォルトでは、eureka サーバーが一定期間 (デフォルト時間は 90 秒) 以内にサービス インスタンスのハートビートを受信しない場合、eureka サーバーはインスタンスを削除します。ただし、ネットワーク分割に障害が発生すると、マイクロサービスとエウレカサーバーは正常に通信できなくなりますが、マイクロサービス自体は正常に通信できますが、このときインスタンスを削除してはいけないため、自己保護機構を導入しています。eureka サーバーは動作中にハートビート障害の割合をカウントし、15 分以内に 85% 未満になった場合、これらのインスタンスは期限切れにならないように保護され、クリーンアップされます。したがって、自己保護メカニズムは、ネットワークの異常な変動に対する保護手段であり、eureka クラスターをより堅牢で安定させることができます。以下の図はgithub公式サイトにある自己保護機構の説明です。

写真

次の図は、デフォルトで eureka サーバーがハートビートを受け入れる最大時間を示しています。デフォルトは 90 秒で、クライアントがハートビートを eureka サーバーに送信する頻度を示しています。デフォルトは 30 秒です。これは、application.properties ファイルを通じて変更できます。

写真

インスタンスをクリアするためのタイムアウトを構成することもできます。

#超时3s自动清除
eureka.server.eviction-interval-timer-in-ms=3000
复制代码

現在、公式 Web サイトには、eureka バージョン 2.0 の更新とメンテナンスが停止しているため、バージョン 2.0 は推奨されず、バージョン 1.0 の方が安定していると記載されています。

写真

要約する

以上がマイクロサービスの登録とサービス発見の学習としてのeurekaの使い方でした!質問や間違いがあれば、指摘して議論してください!

プロジェクトのソースアドレス:

github.com/JiangXia-10…

エウレカ公式サイトgithubアドレス:

github.com/Netflix/eur…

関連する提案

おすすめ

転載: blog.csdn.net/qq_41153943/article/details/125837657