Wenn Sie MDBs wie in JEE-Spezifikation unter Verwendung der @MessageDriven
Annotation definiert verwenden, ist es Aufgabe des Servercontainers, die tatsächliche Instanziierung und Skalierung dieser Beans zu verwalten. Ich bin mit Websphere nicht so vertraut, aber die meisten Server haben eine Vorstellung von EJB-Pooling, das grob in Thread-Pool übersetzt wird - was eine parallele Ausführung von Out-of-the-Box ermöglicht. Auf diese Weise verfügt der Server über eine Reihe von Instanzen, die die Nachrichten in Ihrer Warteschlange verarbeiten können. Jede Bean-Instanz ist nur für die Zeit aktiv, die für die Ausführung der Methode onMessage
erforderlich ist. Danach wird sie bereinigt und in die Warteschlange zurückgestellt. Nehmen wir an, Sie haben einen Pool von MDBs mit der Größe 20. Wenn Sie mehr als 20 Nachrichten in der Warteschlange haben, verwendet der Server alle verfügbaren Instanzen und verarbeitet gleichzeitig 20 Nachrichten.
In Wildfly/JBoss zum Beispiel verwalten Sie Ihre EJB-Pools mit dem EJB-Subsystem und den entsprechenden Pool-Einstellungen.
<subsystem xmlns="urn:jboss:domain:ejb3:4.0">
<!--omitted for brevity... -->
<mdb>
<resource-adapter-ref resource-adapter-name="${ejb.resource-adapter-name:activemq-ra.rar}"/>
<bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
</mdb>
<pools>
<bean-instance-pools>
<strict-max-pool name="mdb-strict-max-pool" derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
</bean-instance-pools>
</pools>
<!--omitted for brevity... -->
Hier geben wir, dass Message Driven Beans einen Pool verwenden soll mdb-strict-max-pool
benannt, die seine Größe von der Anzahl der CPUs auf unserem System leitet. Sie können auch absolute Werte angeben, z. max-pool-size="20"
All dies ist nur relevant, wenn Sie die Warteschlange auf einer einzelnen Serverinstanz ausführen. Wenn Sie wirklich eine nachrichtenintensive Anwendung ausführen, ist es wahrscheinlich, dass Sie eine verteilte Nachrichtenübermittlung mit dediziertem Nachrichtenbroker und mehreren Verarbeitungsinstanzen benötigen. Während viele Server solche Szenarien unterstützen (z. B. Wildfly ActiveMQ-Cluster), ist dies ein wirklich Thema für eine weitere Diskussion.
Weitere Informationen finden Sie unter MDB tutorial und Ihre Server-Dokumentation.
Happy Hacking.