Ich erstelle eine Java EE-Anwendung, die eine große Anzahl von Threads zum Bearbeiten von Daten erstellt. Gibt es eine Möglichkeit, diese Threads auf einem anderen Server als dem, auf dem meine Anwendung gehostet wird, zu erstellen? Lassen Sie dann meinen Anwendungsserver so einrichten, dass er einfach auf diesen anderen (Thread-) Server zugreift, um die Daten aus dem Thread zu einem vom Benutzer angegebenen Zeitpunkt abzurufen. Ich bin sehr besorgt über die Skalierbarkeit meiner Webanwendung.Ausführen von Threads in einer Java EE-Anwendung
Antwort
In einer Java-EE-Anwendung sollten Sie Threads nicht selbst erstellen/ausführen. Das ist die Verantwortung des Anwendungsservers. Außerdem ist es eine schlechte Idee, eine unendliche Anzahl von Threads gleichzeitig zu starten. Dies kann Ihren Server leicht in die Knie zwingen.
Sie sollten stattdessen eine Nachrichtenwarteschlange verwenden. Da java-ee-kompatible Anwendungsserver JMS implementieren, haben sie bereits eine Nachrichtenwarteschlangenimplementierung eingebaut. Wenn Sie JBoss verwenden - die JMS-Implementierung ist HornetQ und ich glaube, seit Wildfly sind sie zu ActiveMQ verschoben.
Dies würde auch Ihr zweites Problem lösen: Ihre Threads laufen lassen - oder in diesem Ihre Message-Queue - auf einem separaten Server oder sogar in einem Cluster von Servern - weil Sie Nachrichten in Remote Message Queues entweder mit JMS veröffentlichen können oder AMQP-Protokoll. Wenn Sie Ihre Nachrichtenwarteschlange auf einem separaten Server ausführen, benötigen Sie nicht einmal einen Anwendungsserver für die Warteschlange. Sie können eine eigenständige Warteschlange ausführen. In diesem Fall würde ich RabbitMQ empfehlen.
Warum nicht einen Dienstserver mit eigenen JVMs (mit eigenen Threads) erstellen, dann können Sie auf unzählige Arten zwischen Ihrem Anwendungs- und Dienstserver kommunizieren. – Kon
Threads leben innerhalb ihrer übergeordneten Prozesse –
@Kon das klingt wie eine exakte Lösung! Könnten Sie mir einen Link zu einer Dokumentation zu diesem Thema senden? –