[JAVA] Implementierung der asynchronen Verarbeitung in Tomcat

Asynchrone Verarbeitung in Tomcat

Einführung

Wenn in einer Webanwendung die HTTP-Anforderung vom Client längere Zeit verarbeitet wird, läuft die HTTP-Antwort ab und es ist schwierig zu überprüfen, ob die HTTP-Anforderung normal akzeptiert wurde. Selbst wenn die Verarbeitung im Hintergrund lange dauert und die Anzahl der gleichzeitigen Ausführungen asynchroner Tasks nicht begrenzt ist, kann sich die Anzahl der Threads erhöhen und die Ressourcen der Betriebsumgebung können erschöpft sein, was zu Inoperabilität führt.

Stellen Sie sich eine Methode zum asynchronen Aufrufen eines Prozesses vor, der lange dauert (siehe Abbildung unten) in einer Tomcat-Anwendung, die auf einem Tomcat-Container ausgeführt wird.

非同期処理の流れ

** Abbildung 1 Asynchroner Verarbeitungsablauf **

In Abbildung 1 befinden sich drei Dinge im Tomcat-Container: Controller, Service und Entity. Wenn eine HTTP-Anforderung vom Client kommt, wird der Dienst vom Controller über den Tomcat-Container asynchron aufgerufen. Eine HTTP-Antwort kann unmittelbar nach dem asynchronen Aufruf an den Client zurückgegeben werden, sodass der Client benachrichtigt werden kann, ob die HTTP-Anforderung akzeptiert oder abgelehnt wurde. Wenn Sie den Ausführungsstatus der asynchronen Aufgabe in der Entität widerspiegeln, können Sie später eine weitere HTTP-Anforderung ausgeben und den Ausführungsstatus überprüfen.

Das Implementieren von asynchronen Aufrufen erfordert die Steuerung des Ablaufs von asynchronen Aufgaben, wie eingangs erwähnt. Hier müssen Sie jedoch wissen, dass es nicht empfohlen wird, dass Anwendungen "ordnungsgemäß" Threads erzeugen. Dies liegt daran, dass der Tomcat-Container und der Java EE-Container die von der Anwendung erstellten Threads nicht erkennen, sodass der Thread-Lebenszyklus nicht ordnungsgemäß verwaltet werden kann. Daher wird es von "Concurrency Utilities für Java EE (JSR 236)" vorgeschlagen, einer Spezifikation zum Verwalten der Anzahl von Threads und des Lebenszyklus. Und in Java EE 7 eingeführt.

Der Tomcat-Container ähnelt einer Teilmenge des Java EE-Containers und unterstützt JSR 236 nicht. Mit dem Spring Framework können Sie jedoch den Thread-Lebenszyklus verwalten. Hier wird erläutert, wie die Flusssteuerung für die nicht gleichzeitige Verarbeitung von "** Unterstützung für einzelne Mandanten " und " Unterstützung für mehrere Mandanten **" mithilfe des Spring Framework implementiert wird.

Artikelstruktur

Dieser Artikel besteht aus drei Artikeln.

Beispielquelle

Der für diesen Artikel erstellte Quellcode finden Sie unter GitHub.

Zusammenfassung

Recommended Posts

Implementierung der asynchronen Verarbeitung in Tomcat
Implementierung einer mandantenfähigen kompatiblen asynchronen Verarbeitung in Tomcat
Implementierung der asynchronen Verarbeitung für einen einzelnen Mandanten in Tomcat
Java-Implementierung von Tri-Tree
Implementierung von HashMap mit Kotlin
[Rails] Asynchrone Implementierung der Like-Funktion
Versuchen Sie, die asynchrone Verarbeitung in Azure zu implementieren
Reihenfolge der Verarbeitung im Programm
Implementierung einer ähnlichen Funktion in Java
Implementierung von DBlayer in Java (RDB, MySQL)
Android Asynchrone UI-Thread-Verarbeitung
So implementieren Sie die asynchrone Verarbeitung in Outsystems
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot
Implementierung der Zifferngruppierung in der Furima App
Implementierungsnotiz für SKStoreReviewController in der Swift-Benutzeroberfläche von iOS14
[Rails] Implementierung von "Benachrichtigung auf irgendeine Weise benachrichtigen"
Interpreter-Implementierung durch Java
Format der Protokollausgabe von Tomcat selbst in Tomcat 8
Untersuchte asynchrone Ausführung von Abfragen in Spring Boot 1.5.9
Bereiten Sie die Ausführungsumgebung von Tomcat in der IntelliJ Community vor
Greifen Sie auf die War-Datei im Stammverzeichnis von Tomcat zu
Über das Problem des Deadlocks bei der Parallelverarbeitung in gem'sprockets '4.0
Implementierungsbeispiel eines einfachen LISP-Verarbeitungssystems (Java-Version)
Boyer-Moore-Implementierung in Java
Asynchrone Verarbeitung und Web-API-Integration in Android Studio
Informationen zum Hinzufügen von Variablen in der iterativen Verarbeitung in der while-Anweisung
Angewandte Implementierung von Chat-Space
Implementierung der Heap-Sortierung (in Java)
Verwenden Sie MouseListener für die Verarbeitung
Implementierung der Pagenationsfunktion
Implementierungsbeispiel eines einfachen LISP-Verarbeitungssystems (Ruby-Version)
Ausgabe in Vielfachen von 3
Informationen zur Implementierung der Zusammenführungsverarbeitung einschließlich der Sortierfunktion der Stream-API
Implementierung der Rails-Sortierfunktion (angezeigt in der Reihenfolge der Anzahl der Gleichen)
Implementierung der Ajax-Entfernung in Rails
Reinigungsprozess japanischer Sätze
Implementierung der sequentiellen Suchfunktion
Implementierung einer ähnlichen Funktion (Ajax)
Implementierung der Bildvorschau
[Java] Implementierung des Faistel-Netzwerks
Implementierung von XLPagerTabStrip mit TabBarController
Gesamtansicht der Tomcat (Catalina) -Architektur
Implementierung der Kategorie-Pulldown-Funktion
[Java] Implementierungsmethode für die Timer-Verarbeitung
Gemessene Parallelverarbeitung mit Java
Mazume Urteilsverarbeitung in der Fischerei