ホームページ  >  記事  >  Java  >  SpringBoot が外部 Tomcat にデプロイされ、Nacos サーバーに登録できない場合の問題を解決する方法

SpringBoot が外部 Tomcat にデプロイされ、Nacos サーバーに登録できない場合の問題を解決する方法

WBOY
WBOY転載
2023-05-13 23:13:042388ブラウズ

何が起こったのか

最近、私はプロジェクト入札デモンストレーション (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 の AbstractAutoServiceRegistrationAbstractAutoServiceRegistrationbind(WebServerInitializedEvent) などを継承します。 メソッドはイベントをリッスンし、ポート番号を設定して登録を開始します。ここで、this.port はイベントから取得されるものであり、自分で取得する必要があります。

SpringBoot が外部 Tomcat にデプロイされ、Nacos サーバーに登録できない場合の問題を解決する方法

ポートが設定されている場所が表示されます。org.springframework.cloud.client.serviceregistry.Registration から取得されます。設定するだけです。 。 それでおしまい。

SpringBoot が外部 Tomcat にデプロイされ、Nacos サーバーに登録できない場合の問題を解決する方法

解決策

完全な構成クラスを作成し、すぐ下に投稿されている問題の下に配置しました。

rree

以上がSpringBoot が外部 Tomcat にデプロイされ、Nacos サーバーに登録できない場合の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。