【Javaインタビュー】Nacos自動登録原理実装とサービス登録更新とレジストリへの保存方法

Nacos自動登録原理の実現

プロセスの完了
SpringBoot には、クラスの自動インジェクションを完了するのに役立つポイントをマウントする方法が用意されていることがわかっています。
Nacos は、META-INF の spring.factories ファイルに自動的に注入する必要がある Bean オブジェクトを追加します。
NacosServiceRegistry と呼ばれるこのクラスは、SpringCloud によって提供される register メソッドを実装し、インスタンスをレジストリに登録するのに役立ちます。
したがって、その後の操作手順は、サービス起動時に register メソッドをどのように自動的に呼び出すかということになります。
Nacos のメソッドは、Spring のコンテナの作成時に発生するイベントに依存しています。
IOC コンテナを作成するときに、リスナーを登録してイベントを公開するために、refresh メソッドが呼び出されることがわかっています。
Nacos の自動登録クラスは ApplicationListener メソッドを実装し、ServletWeb の初期化イベントをリッスンします。
その後、コンテナーが初期化されていれば、現在のサービスをレジストリに登録するプロセスが完了します。

サービス登録の更新とレジストリへの保存方法

完全なプロセス
Nacos には、名前空間、グループ、サービスという 3 つの分離環境があることがわかっています。
このうち、サービスは特定のサービスであり、これらのサービスはクラスターでの展開をサポートするため、サービスにはクラスター構造が含まれます。
上記の分析から、Nacos のレジストリ情報は 3 層のマップに似た構造である必要があることもわかります。
つまり、名前空間には複数のグループがあり、各グループは複数のサービスを持つことができ、サービスにはクラスターが存在する可能性があり、これらのクラスターの次々とクラスターがインスタンス インスタンスです。つまり、次々と開始されました。マイクロサービス。
したがって、サービスを登録するときは、まずサービスを取得し、それがどのサービスであるかを認識してから、そのサービスに対応するコレクションに現在のインスタンスを追加する必要があります。
この時点で、上記のサービスの名前空間とグループを使用してサービスを見つけることができます。
サービスを見つけた後、サービスが作成される前にサービスが作成されている場合、Nacos は同時実行性のセキュリティを確保するために二重取得メソッドを使用してサービスを作成し、サービスの作成後にサービスを配置できます。サービス名: サービス インスタンス。
この時点で、これは、現在のサービス内のすべてのインスタンスを取得し、ハートビートが 15 秒以内に送り返されるかどうかを判断するタイミング タスクを作成します。そうでない場合は、インスタンスの正常な状態を false に設定します。 30 秒を超えると、現在のインスタンスは削除されます。
この時点でサービスは作成されているので、あとは現在の新しいインスタンスをサービスに追加するだけです。
Nacos の方法は、完全に追加することです。つまり、最初に既存のものを取得し、次に現在のものを追加します。
ここでは、同時実行の安全性を確保するために CopyOnWrite メソッドが使用されています。
後続のプロセスでは、現在のインスタンスが一時インスタンスであるか永続インスタンスであるかを判断し、それを一時インスタンスまたは永続インスタンスに対応するセットに追加します。
Distro と Raft の 2 つのプロトコルがあります。Distro は非同期メソッドを使用してデータを更新し、クラスター内の他のノードにデータが更新されたことを知らせるイベントを発行します。

おすすめ

転載: blog.csdn.net/Zhangsama1/article/details/132145216