Heim >Java >javaLernprogramm >So implementieren Sie den Registrierungsdienst in Springboot

So implementieren Sie den Registrierungsdienst in Springboot

WBOY
WBOYnach vorne
2023-05-12 12:28:061484Durchsuche

Bei der Verwendung von Springboot für die Entwicklung müssen wir uns häufig mit solchen Szenarien auseinandersetzen: Wenn der Dienst gestartet wird, muss der Dienststatus beim Dienstregistrierungszentrum (z. B. zk) registriert werden, damit, wenn der Wenn sich der Dienststatus ändert, kann es zu Fehlern bei der Extraktion und dem Lastausgleich kommen.

Ich habe zwei Möglichkeiten gefunden, mich zu registrieren:

1: Registrieren Sie sich direkt, nachdem die Spring-Webanwendung gestartet wurde 🎜#2. Nachdem der Servlet-Container gestartet wurde, registrieren Sie ihn über den Listener.

Dieser Artikel verwendet eine Demo, um diese beiden Registrierungsmethoden zu beschreiben, wobei die traditionelle Lösung der Registrierung bei zk verwendet wird.

1. Registrieren Sie sich, nachdem die Spring-Webanwendung gestartet wurde.

Schauen wir uns zuerst den Code an in der Webanwendung und führen Sie die Registrierung durch.

Hier muss erklärt werden, dass wir ApplicationContext verwenden, um die Bean von zkClient abzurufen. Der Grund dafür ist, dass Sie Autowired nicht zum Injizieren von Beans verwenden können, da alle Beans gelesen werden Während des Startvorgangs von webApplication sind die Konfiguration und die Bean-Initialisierung abgeschlossen. Sie können die Bean nicht injizieren, bevor die Initialisierung abgeschlossen ist.

Der detaillierte Code zur Registrierung wird hier nicht erweitert.

2. Nachdem der Servlet-Container initialisiert wurde, registrieren Sie ihn über einen Listener.

Schreiben Sie immer noch zuerst den Code Erstens implementiert dieser Listener die ServletContextListener-Schnittstelle und wird mit @WebListener annotiert. Dies ist die Springboot-Annotations-Listener-Schreibmethode.

Nachdem der Servlet-Container erfolgreich gestartet wurde, wird die contextInitialized-Methode dieses Listeners aufgerufen. Wenn der Servlet-Container zerstört ist und keine Dienste bereitstellen kann, wird die contextDestroyed-Methode des Listeners aufgerufen. Mit anderen Worten: Dieser Listener überwacht den Status des Servlet-Containers.

Dann müssen Sie nur noch die Listener-Konfiguration in der Hauptklasse der Anwendung öffnen.

@SpringBootApplication
public class WebApplication {
 private static final Logger logger = LoggerFactory.getLogger(WebApplication.class);
 private static volatile boolean 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: 注册成功");
 }
 }
}

3. Vergleich dieser beiden Methoden

Für einen Webdienst, der das HTTP-Protokoll für die Außenwelt bereitstellt, ist die Registrierung des Servlet-Containers semantisch klarer, aber wenn Wenn die Startzeit des Spring-Containers zu lang ist, wird das Servlet möglicherweise initialisiert und registriert, der Dienst kann jedoch keinen externen Zugriff auf die Lückenzeit bereitstellen. Daher verwende ich normalerweise die erste Methode zur Registrierung.

Dieses Szenario sieht so aus

Sie können sehen, dass die Webanwendung nach erfolgreicher Registrierung des Servlets nicht tatsächlich gestartet wurde Derzeit kann der Dienst jedoch keinen normalen Zugriff bieten.

So implementieren Sie den Registrierungsdienst in Springboot

Wie ihr auf zk sehen könnt, waren beide Anmeldungen erfolgreich.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie den Registrierungsdienst in Springboot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen