SpringBoot를 사용하여 개발하는 과정에서 서비스가 시작된 시나리오를 다루어야하며 서비스 상태를 서비스 등록 센터 (예 : ZK)에 등록해야하므로 서비스 상태가 변경되면 실패 제거 및로드 밸런싱을 수행 할 수 있습니다.
등록하는 두 가지 방법을 발견했습니다.
1. Spring의 웹 응용 프로그램이 시작된 직후에 등록하십시오.
2. 서블릿 컨테이너가 시작된 후 리스너를 통해 등록하십시오.
이 기사는 데모를 사용하여 ZK와 함께 기존 등록 체계를 사용 하여이 두 등록 방법을 설명합니다.
1. 스프링 웹 응용 프로그램이 시작된 후 등록하십시오
먼저 코드를 살펴 보겠습니다
@SpringBootApplicationPublic Class WebApplication {private static final logger = loggerfactory.getLogger (webApplication.class); 개인 정적 휘발성 부울 IS_REGISTRY = FALSE; public static void main (String [] args) {ApplicationContext context = run (webApplication.class, args); if (is_registry) {logger.info ( "레지스터 2 : webapplication이 시작된 후"); zkclient zkclient = context.getBean (zkclient.class); zkclient.register (); is_registry = true; logger.info ( "레지스터 2 : 등록이 성공적이었다"); }}}여기서는 웹 응용 프로그램에서 zkclient를 얻고 등록합니다.
여기서 우리는 ApplicationContext를 사용하여 zkclient의 Bean을 얻는다는 점에 유의해야합니다. 그 이유는 웹 응용 프로그램을 시작하는 동안 모든 구성이 읽히고 Bean이 초기화되기 때문에 웹 응용 프로그램을 초기화하는 동안 자율적 인 방식으로 Bean을 주입 할 수 없기 때문입니다. 초기화가 완료되기 전에 콩을 주입 할 수 없습니다.
등록을위한 세부 코드는 여기에서 확장되지 않습니다.
2. 서블릿 컨테이너가 초기화 된 후에는 리스너를 통해 등록하십시오.
또는 먼저 코드를 시작하십시오
@WeblistenerPublic Class RegisterListener는 ServletContextListener {Protected Final Logger = LoggerFactory.getLogger (this.getClass ()); 개인 정적 휘발성 부울 IS_REGISTRY = FALSE; @autowired private zkclient zkclient; @override public void contextinitialized (servletcontextevent servletcontextevent) {try {if (! is_registry) {logger.info ( "레지스터 1 : 서블릿 컨테이너가 성공적으로 시작된 후"); zkclient.register (); logger.info ( "레지스터 1 : 성공적으로 레지스터"); } is_registry = true; } catch (예외 e) {is_registry = false; logger.info ( "레지스터 1 : 등록 실패"); }} @override public void contextDestroyed (servletcontexTevent servletcontextevent) {if (is_registry) {zkclient.stop (); }}}먼저 청취자를 작성해야합니다. 이 리스너는 ServletContextListener 인터페이스를 구현하고 @weblistener와 주석을 달 수 있습니다. 이것은 스프링 부츠 주석 청취 방법입니다.
서블릿 컨테이너가 성공적으로 시작되면 청취자의 상황에 맞는 방법이 호출됩니다. 서블릿 컨테이너가 파괴되고 서비스를 제공 할 수없는 경우, 청취자의 문맥에서 파괴 된 방법이 호출됩니다. 다시 말해,이 청취자는 서블릿 컨테이너의 상태를 듣고 있습니다.
그런 다음 응용 프로그램 메인 클래스에서 리스너 구성을 열면됩니다.
@servletcomponentscan@springbootapplicationpublic class webapplication {}3.이 두 가지 방법의 비교
외부 적으로 HTTP 프로토콜을 제공하는 웹 서비스의 경우 서블릿 컨테이너의 등록이 의미에서 명확 해집니다. 그러나 스프링 컨테이너가 너무 오래 시작되면 서블릿 초기화가 완료되어 등록 될 수 있지만 서비스는 외부 적으로 간격 시간에 액세스 할 수 없으므로 일반적으로 첫 번째 메소드를 사용합니다.
이 시나리오는 다음과 같습니다
서블릿 등록이 성공한 후에는 웹 응용 프로그램이 아직 시작되지 않았으며 현재 서비스는 정상적으로 액세스 할 수 없음을 알 수 있습니다.
ZK에서 두 등록이 성공적이라는 것을 알 수 있습니다.
요약
위는 편집자가 소개 한 Springboot 등록 서비스 등록 센터 (ZK)에 대한 자세한 설명입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!