Bei der Entwicklung mit Springboot müssen wir uns häufig mit einem Szenario befassen, in dem der Service gestartet wird. Der Service -Status muss beim Service Registration Center (z. B. ZK) registriert werden.
Ich habe zwei Möglichkeiten zur Registrierung gestoßen:
1. Registrieren Sie sich direkt nach Beginn der Webapplication von Spring;
2. Nachdem der Servlet -Container gestartet wurde, registrieren Sie sich über den Hörer.
In diesem Artikel wird eine Demo verwendet, um diese beiden Registrierungsmethoden zu beschreiben, wobei das herkömmliche Registrierungsschema mit ZK verwendet wird.
1. Registrieren Sie sich, nachdem Spring Webapplication gestartet wurde
Schauen wir uns zuerst den Code an
@SpringbootApplicationPublic Class WebApplication {private static Final Logger logger = loggerfactory.getLogger (WebApplication.Class); private statische volatile boolean is_registry = false; public static void main (String [] args) {ApplicationContext context = run (WebApplication.class, Args); if (is_registry) {logger.info ("Register 2: Nach dem Start von WebApplication"); ZKClient zkclient = context.getBean (Zkclient.class); Zkclient.register (); Is_registry = true; logger.info ("Register 2: Registrierung war erfolgreich"); }}}Hier erhalten wir den ZKClient in Webapplication und Registration.
Hier sollte angemerkt werden, dass wir ApplicationContext verwenden, um die Bohne von ZKClient zu erhalten. Der Grund dafür ist, dass Sie die Bohne während der Initialisierung der Webanapplikation nicht auf automatische Weise injizieren können, da alle Konfigurationen gelesen werden und die Bean während des Starts der Webapplication initialisiert wird. Sie können die Bohne nicht vor Abschluss der Initialisierung injizieren.
Der detaillierte Code für die Registrierung wird hier nicht erweitert.
2. Nachdem der Servlet -Container initialisiert wurde, registrieren Sie sich über den Hörer
Oder starten Sie zuerst den Code
@WeblistenerPublic class RegisterListener implementiert servletContextListener {Protected Final Logger logger = loggerFactory.getLogger (this.getClass ()); private statische volatile boolean is_registry = false; @Autowired Private Zkclient Zkclient; @Override public void contextInitialized (servletContexEvent servletContexevent) {try {if (! Is_registry) {logger.info ("Register 1: Nach dem erfolgreichen Diener -Container begonnen"); Zkclient.register (); logger.info ("Register 1: erfolgreich registrieren"); } Is_registry = true; } catch (Ausnahme e) {is_registry = false; logger.info ("Register 1: Registrierung fehlgeschlagen"); }} @Override public void contextDestroyed (servletContexevent servletConteEvent) {if (is_registry) {zkclient.stop (); }}}Sie müssen zuerst einen Zuhörer schreiben. Dieser Hörer implementiert die ServletContextListener -Schnittstelle und kommentiert sie mit @Weblistener. Dies ist die Springboot Annotation Hörmethode.
Nachdem der Servlet -Container erfolgreich gestartet wurde, wird die kontextinitialisierte Methode des Hörers aufgerufen. Wenn der Servlet -Container zerstört wird und keine Dienste anbieten kann, wird die kontextdestryierte Methode des Hörers aufgerufen. Mit anderen Worten, dieser Hörer hört auf den Zustand des Servlet -Containers.
Dann müssen Sie nur die Listener -Konfiguration in der Anwendungs -Hauptklasse öffnen.
@ServletComponentscan@SpringBootApplicationPublic Class WebApplication {}3. Vergleich dieser beiden Methoden
Für einen Webdienst, der das HTTP -Protokoll extern anbietet, ist die Registrierung des Servlet -Containers in der Semantik klarer. Wenn Ihr Frühlingscontainer jedoch zu lang beginnt, kann die Servlet -Initialisierung abgeschlossen und registriert sein. Der Service kann jedoch nicht extern auf die Lückezeit zugreifen. Daher verwende ich im Allgemeinen die erste Methode, um sich zu registrieren.
Dieses Szenario ist so
Es ist ersichtlich, dass nach erfolgreicher Dienerregistrierung die Webanapplikation noch nicht gestartet wurde und der Service zu diesem Zeitpunkt keinen Zugriff ermöglichen kann.
Sie können auf ZK sehen, dass beide Registrierungen erfolgreich waren.
Zusammenfassen
Das obige ist eine detaillierte Erläuterung des vom Herausgebers vorgestellten Springboot Registration Service Registration Center (ZK). Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!