1.Nacosクライアントはプロジェクトのバージョンによって異なります
2.2.2.RELEASE
2. @EnableDiscoveryClientは、サービス登録機能を制御します
nacosクライアント側のサービス登録を有効にするには、@EnableDiscoveryClientアノテーションをメインのスタートアップクラスに追加する必要があります
まず、この注釈が何をするかを見てみましょう
属性booleanautoRegister()default trueがあり、デフォルト値はtrueです。つまり、サービスの自動登録はデフォルトで有効になっています。
EnableDiscoveryClientImportSelectorセレクターコンポーネントをインポートしました
継承されたSpringFactoryImportSelector、そのselectImportsメソッドを見てください
注釈の属性からautoRegisterの値を取得します。デフォルトはtrueです。trueの場合は、コンテナーに追加します。
org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration
@EnableConfigurationProperties({AutoServiceRegistrationProperties.class})
AutoServiceRegistrationProperties構成クラスを有効にします
デフォルト値があります
つまり、@ EnableDiscoveryClientアノテーションは、サービスを追加せずに通常どおり登録できます。
@EnableDiscoveryClientアノテーションが追加され、プロパティautoRegisterがfalseに設定されている場合、nacosサービスは追加されません。
または設定することができます
spring.cloud.service-registry.auto-registration.enabled= false ///默认值为 true
3.自動構成メカニズム
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
新しいNacosAutoServiceRegistrationオブジェクト
NacosAutoServiceRegistrationクラスのフォローアップ
5.NacosAutoServiceRegistration
com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration
public class NacosAutoServiceRegistration
extends AbstractAutoServiceRegistration<Registration>
AbstractAutoServiceRegistration抽象クラスを継承しました
アーキテクチャを図に示します
最初に親クラスを初期化し、super(serviceRegistry、autoServiceRegistrationProperties)メソッドをクリックします
@EnableDiscoveryClientアノテーションが追加されていない場合、親クラスコンストラクターを呼び出す構成情報クラスには、コンテナー内にAutoServiceRegistrationPropertiesのインスタンスがないことに注意してください。
6.AbstractAutoServiceRegistration
org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration
この抽象クラスはApplicationListenerインターフェースを実装し、変更されたインターフェースのvoid onApplicationEvent(E event)メソッドを書き換えて、Springコンテナーの起動イベントをモニターし、タイプApplicationListenerがここで指定されていることに注意してください。
org.springframework.boot.web.context.WebServerInitializedEvent
これは、Webサーバーのイベントをリッスンすることです。
6.1 onApplicationEvent 方法
onApplicationEventメソッドに戻り、AbstractAutoServiceRegistration.onApplicationEventリスナーイベントメソッドの機能を確認します。
このクラスのbindメソッドは呼び出されます
6.2バインドメソッド
変更されたメソッドでは、現在のAbstractAutoServiceRegistrationオブジェクトのポートプロパティが、casを介してWebコンテナのポート番号に変更されます。
次に、現在のオブジェクトのstartメソッドを呼び出します
6.3開始方法
6.4 register()メソッド
ServiceRegistry.registerメソッドが呼び出されます
ServiceRegistryは、実装クラスNacosServiceRegistryが1つしかないインターフェースです。
7.NacosServiceRegistry
com.alibaba.cloud.nacos.registry.NacosServiceRegistry
7.1登録方法
getNacosInstanceFromRegistrationを確認するだけで、インスタンスを生成できます
NamingService.registerInstanceメソッドが呼び出されます
NamingServiceもインターフェースであり、実装クラスNacosNamingServiceは1つだけです。
8. NacosNamingService
8.1registerInstanceメソッド
serverProxy.registerServiceが呼び出されます
serverProxyタイプはNamingProxyです
9.NamingProxy
com.alibaba.nacos.client.naming.net.NamingProxy
9.1 registerService 方法
このメソッドの機能を確認してください
新しいHashMapを作成しましたコンテナを16に自動的に初期化しましたカプセル化された11個のパラメータ11個のパラメータのデフォルトサイズが16に設定される理由2️⃣ハッシュマップの容量は2の累乗です
最後に、このクラスのreqApiメソッドを呼び出します
このメソッドの呼び出しで渡される3つのパラメーターに注意してください
- `UtilAndComs.nacosUrlInstanceここでの定数クラスの値は/nacos/ v1 / ns/instanceです
- `params
ハッシュマップカプセル化パラメータ
-
`「POST」
単純な文字列を使用して、メソッドで何が行われるかを確認します
9.2reqApiメソッド
このクラスのオーバーロードされたメソッドは呼び出されます
このクラスのcallServerメソッドが呼び出されます
9.3callServerメソッド
最後に、このクラスのnacosRestTemplate.exchangeForm(url、header、params、body、method、String.class)メソッドが呼び出されます。
nacosRestTemplateはタイプNacosRestTemplateです
10 NacosRestTemplate
最終送信リクエスト
http:// xxxx:8848 / nacos / v1 / ns/instanceにリクエストを送信するためのアドレスを覚えておいてください
これで、Nacosクライアントサービスの登録プロセスは終了しました。