No processo de desenvolvimento usando o Springboot, geralmente precisamos lidar com um cenário em que o serviço é iniciado, o status do serviço precisa ser registrado no Centro de Registro de Serviço (como o ZK), de modo que, quando o status do serviço mudar, a remoção de falhas e o balanceamento de carga possam ser realizados.
Eu encontrei duas maneiras de me registrar:
1. Registre -se diretamente após o início da aplicação da Web da primavera;
2. Depois que o contêiner do servlet for iniciado, registre -se através do ouvinte.
Este artigo usa uma demonstração para descrever esses dois métodos de registro, usando o esquema de registro tradicional com o ZK.
1. Registre -se após a aplicação da web da primavera
Vamos dar uma olhada no código primeiro
@Springbootapplicationpublic classApplication {private Static Final Logger Logger = LoggerFactory.getLogger (webApplication.class); private estático volátil booleano is_registry = false; public static void main (string [] args) {ApplicationContext context = run (webApplication.class, args); if (is_registry) {Logger.info ("Registre 2: após o webApplication iniciar"); Zkclient zkclient = context.getbean (zkclient.class); zkclient.register (); Is_registry = true; Logger.info ("Registro 2: o registro foi bem -sucedido"); }}}Aqui, obtemos o ZKCLIENT em aplicativo e registro da web.
Deve -se notar aqui que usamos o ApplicationContext para obter o feijão do ZKCLIENT. O motivo é que você não pode injetar o feijão da maneira automática durante a inicialização da aplicação da web, porque todas as configurações serão lidas e o feijão será inicializado durante a inicialização da aplicação da web. Você não pode injetar o feijão antes que a inicialização seja concluída.
O código detalhado do registro não será expandido aqui.
2. Depois que o contêiner serve é inicializado, registre -se através do ouvinte
Ou inicie o código primeiro
@WebListenerPublic Class RegisterListener implementa servletContextListener {Protected Final Logger Logger = LoggerFactory.getLogger (this.getClass ()); private estático volátil booleano is_registry = false; @Autowired Private ZKClient ZKCLIENT; @Override public void contextinitialized (servletContextevent servletContextevent) {try {if (! Is_registry) {logger.info ("Registro 1: depois que o contêiner do servlet for iniciado com sucesso"); zkclient.register (); Logger.info ("Registro 1: registro com sucesso"); } Is_registry = true; } catch (Exceção e) {is_registry = false; Logger.info ("Registro 1: falha no registro"); }} @Override public void contextDestroyed (servletContextevent servletContextevent) {if (is_registry) {zkclient.stop (); }}}Você precisa escrever um ouvinte primeiro. Este ouvinte implementa a interface ServletContextListener e a anota com @WebListener. Este é o método de escuta da anotação de troca.
Depois que o contêiner do servlet for iniciado com sucesso, o método contextinitalizado do ouvinte será chamado. Se o contêiner do servlet for destruído e não puder fornecer serviços, o método contextDestroyed do ouvinte será chamado. Em outras palavras, esse ouvinte está ouvindo o estado do contêiner de servlet.
Então você só precisa abrir a configuração do ouvinte na classe principal do aplicativo.
@ServletComponentsCan@SpringBootApplicationPublic Classe WebApplication {}3. Comparação desses dois métodos
Para um serviço da Web que fornece externamente o protocolo HTTP, o registro do contêiner serve será mais claro na semântica. No entanto, se o seu contêiner de primavera iniciar por muito tempo, a inicialização do servlet poderá ser concluída e registrada, mas o serviço não poderá fornecer acesso ao tempo de lacuna externamente, por isso geralmente uso o primeiro método para se registrar.
Este cenário é assim
Pode -se observar que, após o sucesso do registro do servlet, a aplicação da web ainda não foi iniciada e o serviço não pode fornecer acesso normalmente no momento.
Você pode ver no ZK que ambos os registros foram bem -sucedidos.
Resumir
O acima exposto é uma explicação detalhada do Centro de Registro de Registro de Springboot (ZK) apresentado a você pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!