最近、私はプロジェクト入札デモンストレーション (POC) 環境のサポートを行いました。これは Nacos サーバーと統合する必要があります。既存のプロジェクトにすでに Nacos 関連の依存関係があることを考えると、それは簡単ではありませんか?新しいサーバーを作成し、構成して、何度か再起動しますよね?しかし、物事は思っているほど単純ではありません。同じコードをローカル IDE で実行すると正常に登録できますが、デモ環境 Tomcat War にはデプロイできません。
リモート デバッグ コードの後、Nacos クライアントのスレッドが開始されたことがわかりましたが、登録は成功しませんでした。
Tomcat デプロイメント モードに関連している可能性があると考えたので、公式の問題と StackOverFlow を確認しました。
イベントは、Spring Boot の開始の一部として公開されています。埋め込み Tomcat インスタンス。外部コンテナにデプロイしている場合、開始する埋め込みコンテナがないため、イベントは発行されません。– Andy Wilkinson
大まかに言うと、Spring Boot が埋め込み Tomcat を開始するときのみです。正常に完了すると、WebServerInitializedEvent
イベントが解放されます。 Nacos クライアントは、サーバーに自身を登録する前に、このイベントが発生するのを待ちます。また、外部 Tomcat にデプロイされるため、埋め込み Tomcat は初期化されず、このイベントはトリガーされません。
したがって、解決策は、Nacos などのイベントのコードの一部を呼び出して、登録を開始できるようにすることです。
Nacos の自動登録クラスは NacosAutoServiceRegistration
で、Spring Cloud の AbstractAutoServiceRegistration
、AbstractAutoServiceRegistration
の bind(WebServerInitializedEvent) などを継承します。
メソッドはイベントをリッスンし、ポート番号を設定して登録を開始します。ここで、this.port
はイベントから取得されるものであり、自分で取得する必要があります。
ポートが設定されている場所が表示されます。org.springframework.cloud.client.serviceregistry.Registration
から取得されます。設定するだけです。 。 それでおしまい。
完全な構成クラスを作成し、すぐ下に投稿されている問題の下に配置しました。
rree以上がSpringBoot が外部 Tomcat にデプロイされ、Nacos サーバーに登録できない場合の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。