【春のクラウド】Nacosサービス登録プロセスのソースコード

1.Nacosクライアントはプロジェクトのバージョンによって異なります

2.2.2.RELEASE

2. @EnableDiscoveryClientは、サービス登録機能を制御します

nacosクライアント側のサービス登録を有効にするには、@EnableDiscoveryClientアノテーションをメインのスタートアップクラスに追加する必要があります

まず、この注釈が何をするかを見てみましょう

画像-20220328192658892

属性booleanautoRegister()default trueがあり、デフォルト値はtrueです。つまり、サービスの自動登録はデフォルトで有効になっています。

EnableDiscoveryClientImportSelectorセレクターコンポーネントをインポートしました

継承されたSpringFactoryImportSelector、そのselectImportsメソッドを見てください

画像-20220328205620753

注釈の属性からautoRegisterの値を取得します。デフォルトはtrueです。trueの場合は、コンテナーに追加します。

org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration

画像-20220328205907264

@EnableConfigurationProperties({AutoServiceRegistrationProperties.class})

AutoServiceRegistrationProperties構成クラスを有効にします

画像-20220328193229478

デフォルト値があります

つまり、@ EnableDiscoveryClientアノテーションは、サービスを追加せずに通常どおり登録できます。

@EnableDiscoveryClientアノテーションが追加され、プロパティautoRegisterがfalseに設定されている場合、nacosサービスは追加されません。

または設定することができます

spring.cloud.service-registry.auto-registration.enabled= false   ///默认值为 true

3.自動構成メカニズム

画像-20220328193250359

  com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration,\
  com.alibaba.cloud.nacos.ribbon.RibbonNacosAutoConfiguration,\
  com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
  com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
  com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
  com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration,\
  com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration,\
  com.alibaba.cloud.nacos.NacosServiceAutoConfiguration

NacosServiceRegistryAutoConfiguration自動構成クラスを追加しました

4. NacosServiceRegistryAutoConfiguration

画像-20220328193354641

新しいNacosAutoServiceRegistrationオブジェクト

NacosAutoServiceRegistrationクラスのフォローアップ

5.NacosAutoServiceRegistration

com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration

public class NacosAutoServiceRegistration
      extends AbstractAutoServiceRegistration<Registration> 

AbstractAutoServiceRegistration抽象クラスを継承しました

アーキテクチャを図に示します

画像-20220328193627564

画像-20220328193824377

最初に親クラスを初期化し、super(serviceRegistry、autoServiceRegistrationProperties)メソッドをクリックします

@EnableDiscoveryClientアノテーションが追加されていない場合、親クラスコンストラクターを呼び出す構成情報クラスには、コンテナー内にAutoServiceRegistrationPropertiesのインスタンスがないことに注意してください。

画像-20220328193956208

6.AbstractAutoServiceRegistration

org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration

画像-20220328194128411

この抽象クラスはApplicationListenerインターフェースを実装し、変更されたインターフェースのvoid onApplicationEvent(E event)メソッドを書き換えて、Springコンテナーの起動イベントをモニターし、タイプApplicationListenerがここで指定されていることに注意してください。

画像-20220328194634156

org.springframework.boot.web.context.WebServerInitializedEvent

これは、Webサーバーのイベントをリッスンすることです。

6.1 onApplicationEvent 方法

onApplicationEventメソッドに戻り、AbstractAutoServiceRegistration.onApplicationEventリスナーイベントメソッドの機能を確認します。

画像-20220328195019756

このクラスのbindメソッドは呼び出されます

6.2バインドメソッド

画像-20220328195615271

変更されたメソッドでは、現在のAbstractAutoServiceRegistrationオブジェクトのポートプロパティが、casを介してWebコンテナのポート番号に変更されます。

次に、現在のオブジェクトのstartメソッドを呼び出します

6.3開始方法

画像-20220328200113667

6.4 register()メソッド

画像-20220328200134343

ServiceRegistry.registerメソッドが呼び出されます

ServiceRegistryは、実装クラスNacosServiceRegistryが1つしかないインターフェースです。画像-20220328200444670

7.NacosServiceRegistry

com.alibaba.cloud.nacos.registry.NacosServiceRegistry

7.1登録方法

画像-20220328201004426

getNacosInstanceFromRegistrationを確認するだけで、インスタンスを生成できます

画像-20220328201213381

画像-20220328201406601

NamingService.registerInstanceメソッドが呼び出されます

NamingServiceもインターフェースであり、実装クラスNacosNamingServiceは1つだけです。

8. NacosNamingService

8.1registerInstanceメソッド

画像-20220328201514946

serverProxy.registerServiceが呼び出されます

serverProxyタイプはNamingProxyです

9.NamingProxy

com.alibaba.nacos.client.naming.net.NamingProxy

9.1 registerService 方法

このメソッドの機能を確認してください

画像-20220328201814165

新しいHashMapを作成しましたコンテナを16に自動的に初期化しましたカプセル化された11個のパラメータ11個のパラメータのデフォルトサイズが16に設定される理由2️⃣ハッシュマップの容量は2の累乗です

最後に、このクラスのreqApiメソッドを呼び出します

このメソッドの呼び出しで渡される3つのパラメーターに注意してください

  1. `UtilAndComs.nacosUrlInstanceここでの定数クラスの値は/nacos/ v1 / ns/instanceです

画像-20220328202229020

  1. `params

ハッシュマップカプセル化パラメータ

  1. `「POST」

    単純な文字列を使用して、メソッドで何が行われるかを確認します

9.2reqApiメソッド

画像-20220328202435324

このクラスのオーバーロードされたメソッドは呼び出されます

画像-20220328203144550

このクラスのcallServerメソッドが呼び出されます

9.3callServerメソッド

画像-20220328203953073

最後に、このクラスのnacosRestTemplate.exchangeForm(url、header、params、body、method、String.class)メソッドが呼び出されます。

nacosRestTemplateはタイプNacosRestTemplateです

10 NacosRestTemplate

最終送信リクエスト

画像-20220328204214330

http:// xxxx:8848 / nacos / v1 / ns/instanceにリクエストを送信するためのアドレスを覚えておいてください

これで、Nacosクライアントサービスの登録プロセスは終了しました。

おすすめ

転載: blog.csdn.net/JAVAlife2021/article/details/123806777