>  기사  >  Java  >  SpringBoot가 외부 Tomcat에 배포되어 Nacos 서버에 등록할 수 없는 경우 문제를 해결하는 방법

SpringBoot가 외부 Tomcat에 배포되어 Nacos 서버에 등록할 수 없는 경우 문제를 해결하는 방법

WBOY
WBOY앞으로
2023-05-13 23:13:042389검색

무슨 일이 일어났나요

최근 POC(Project Bidding Demonstration) 환경 지원을 했는데 Nacos 서버 통합이 필요했습니다. 기존 프로젝트에 이미 Nacos 관련 종속성이 있다는 점을 고려하면 간단하지 않나요? 새 서버를 만들고 구성하고 몇 번 다시 시작하면 되지 않습니까? 그러나 상황은 생각만큼 단순하지 않습니다. 내 로컬 IDE에서 실행하면 동일한 코드가 성공적으로 등록될 수 있지만 Tomcat+War 데모 환경에서는 배포할 수 없습니다.

원격으로 코드를 디버깅한 결과 Nacos 클라이언트의 스레드가 시작되었으나 등록에 실패한 것으로 나타났습니다.

Thinking

Tomcat 배포 모드와 관련이 있을 수 있다고 생각하여 공식 이슈와 StackOverFlow를 확인했습니다.

외부에 배포하는 경우 내장된 Tomcat 인스턴스를 시작하는 Spring Boot의 일부로 이벤트가 게시됩니다. 컨테이너에는 시작할 내장 컨테이너가 없으므로 이벤트가 게시되지 않습니다. – Andy Wilkinson

대략 말하면 WebServerInitializedEvent 이벤트는 Spring Boot가 내장 Tomcat을 성공적으로 시작한 후에만 게시됩니다. Nacos 클라이언트는 서버에 등록하기 전에 이 이벤트가 발생할 때까지 기다립니다. 그리고 외부 Tomcat에 배포되기 때문에 내장된 Tomcat이 초기화되지 않으므로 이 이벤트가 발생하지 않습니다. WebServerInitializedEvent 事件。而Nacos客户端在等这个事件出现才会向服务端注册自己。又因部署在外部Tomcat中就不会初始化内嵌Tomcat,也就没触发这个事件。

所以解决方法就是将Nacos等事件的部分代码调用下,让他们启动注册。

Nacos的自动注册类是 NacosAutoServiceRegistration,它继承Spring Cloud的AbstractAutoServiceRegistration,在AbstractAutoServiceRegistration等的 bind(WebServerInitializedEvent)方法监听事件,设置端口号并启动注册。这里边 this.port 是从事件中获取的,需要我们自行获取。

SpringBoot가 외부 Tomcat에 배포되어 Nacos 서버에 등록할 수 없는 경우 문제를 해결하는 방법

设置port的位置可见,是从org.springframework.cloud.client.serviceregistry.Registration

그래서 해결책은 Nacos와 같은 일부 이벤트 코드를 호출하여 등록을 시작하도록 하는 것입니다.

SpringBoot가 외부 Tomcat에 배포되어 Nacos 서버에 등록할 수 없는 경우 문제를 해결하는 방법Nacos의 자동 등록 클래스는 Spring Cloud의 AbstractAutoServiceRegistrationAbstractAutoServiceRegistrationbind(WebServerInitializedEvent)NacosAutoServiceRegistration입니다. /code> 메소드는 이벤트를 수신하고 포트 번호를 설정하며 등록을 시작합니다. 여기서 this.port는 이벤트에서 가져오며 직접 가져와야 합니다.

SpringBoot를 외부 Tomcat에 배포하여 등록할 수 없는 경우 문제 해결 방법 to the Nacos server

포트가 설정된 위치가 보입니다. org.springframework.cloud.client.serviceregistry.Registration에서 가져옵니다. 설정하면 됩니다.

🎜🎜🎜🎜Solution🎜🎜완전한 구성 클래스를 작성하여 바로 아래에 게시된 ISSUE 아래에 배치했습니다. 🎜아아아아

위 내용은 SpringBoot가 외부 Tomcat에 배포되어 Nacos 서버에 등록할 수 없는 경우 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제