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.
Dieser Artikel besteht aus drei Artikeln.
Der für diesen Artikel erstellte Quellcode finden Sie unter GitHub.
Recommended Posts