Dans le processus de développement à l'aide de Springboot, nous devons souvent faire face à un scénario où le service est démarré, l'état du service doit être enregistré auprès du centre d'enregistrement de service (tel que ZK), de sorte que lorsque l'état du service change, la suppression de défaillance et l'équilibrage de charge peuvent être effectués.
J'ai rencontré deux façons de m'inscrire:
1. Inscrivez-vous directement après le démarrage de l'application Web de Spring;
2. Après le démarrage du conteneur servlet, inscrivez-vous via l'auditeur.
Cet article utilise une démo pour décrire ces deux méthodes d'enregistrement, en utilisant le schéma d'enregistrement traditionnel avec ZK.
1. Inscrivez-vous après le démarrage du Spring Web Application
Jetons un coup d'œil au code d'abord
@Springbootapplicationpublic class webApplication {private static final logger = loggerfactory.getLogger (webApplication.class); Boolean volatile statique privé is_registry = false; public static void main (String [] args) {applicationContext context = run (webApplication.class, args); if (is_registry) {Logger.info ("Register 2: après le point de démarrage de WebApplication"); ZkClient zkClient = context.getBean (zkclient.class); zkclient.register (); Is_registry = true; Logger.info ("Register 2: L'inscription a réussi"); }}}Ici, nous obtenons le ZKClient dans Webapplication et nous inscrivons.
Il convient de noter ici que nous utilisons ApplicationContext pour obtenir le bean de ZKClient. La raison en est que vous ne pouvez pas injecter le bean de la manière automatique pendant l'initialisation de l'application Web, car toutes les configurations seront lues et le bean est initialisé lors du démarrage de la WEBAPPLICATION. Vous ne pouvez pas injecter le haricot avant la fin de l'initialisation.
Le code détaillé pour l'enregistrement ne sera pas élargi ici.
2. Une fois le conteneur servlet initialisé, inscrivez-vous via l'auditeur
Ou démarrez d'abord le code
@WeBListEnerPublic Class RegisterListener implémente ServletContextListener {Protection Final Logger Logger = LoggerFactory.getLogger (this.getClass ()); Boolean volatile statique privé is_registry = false; @Autowired Private ZkClient ZKClient; @Override public void contextinitialialialized (servletContexTevent ServletContexTevent) {try {if (! Is_registry) {logger.info ("registre 1: après le démarrage du conteneur servlet"); zkclient.register (); Logger.info ("Registre 1: enregistrez-vous avec succès"); } Is_registry = true; } catch (exception e) {is_registry = false; Logger.info ("Registre 1: Échec de l'enregistrement"); }} @Override public void contextDestRoyed (servletContexTevent servletContexTevent) {if (is_registry) {zkclient.stop (); }}}Vous devez d'abord écrire un auditeur. Cet auditeur implémente l'interface ServletContextListener et l'annote avec @weblister. Il s'agit de la méthode d'écoute d'annotation Springboot.
Une fois le conteneur servlet démarré avec succès, la méthode contextérifiée de l'auditeur sera appelée. Si le conteneur servlet est détruit et ne peut pas fournir de services, la méthode de contexte de l'auditeur sera appelée. En d'autres termes, cet auditeur écoute l'état du conteneur servlet.
Ensuite, il vous suffit d'ouvrir la configuration de l'écoute dans la classe principale de l'application.
@ Servletcomponentscan @ SpringbootApplicationPublic class webApplication {}3. Comparaison de ces deux méthodes
Pour un service Web qui fournit le protocole HTTP à l'extérieur, l'enregistrement du conteneur servlet sera plus clair en sémantique. Cependant, si votre conteneur à ressort commence trop longtemps, l'initialisation du servlet peut être terminée et enregistrée, mais le service ne peut pas donner accès à l'espace externe, donc j'utilise généralement la première méthode pour vous inscrire.
Ce scénario est comme ça
On peut voir qu'après le succès de l'enregistrement du servlet, la Application Web n'a pas encore été lancée et que le service ne peut pas fournir d'accès normalement pour le moment.
Vous pouvez voir sur ZK que les deux inscriptions ont réussi.
Résumer
Ce qui précède est une explication détaillée du Springboot Enregistrement des services d'enregistrement du Centre (ZK) présenté par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!