2016-11-25 3 views
2

Ich arbeite mit WildFly 10.1, die mit Artemis als der neue JMS-Provider geliefert wird, aber ich bin nicht in der Lage, die Anzahl der Consumer-Threads für eine bestimmte MDB dynamisch zu ändern.Wie JMS-Warteschlange MDB-Pool-Größe in WildFly dynamisch ändern 10

Ich habe eine Warteschlange, und ein Message Listener (MDB) Nachrichten aus der Warteschlange konsumieren, jetzt möchte ich dynamisch die maximale Anzahl von Consumern Threads die Domäne muss beginnen, zu steuern.

Wie kann ich es mit CLI tun?

+0

Darf ich fragen, warum Sie das ** dynamisch ** konfigurieren möchten? –

+0

@ RémiBantos Gute Frage. Der Hauptgrund dafür ist, dass das Drücken neuer Versionen für QA und Produktion ein Problem bei den Veränderungsprozessen einiger Kunden ist. Der gesamte Prozess kann Wochen dauern, muss manuell sein und von einer dritten Partei ausgeführt werden (nein, ich mache keine Witze). Ich halte das Feintuning lieber flexibel, damit wir schnell reagieren können, ohne uns mit der Änderungsabteilung auseinanderzusetzen und die Dinge zu erledigen. Ich habe in der Vergangenheit gute Erfahrungen mit diesem Ansatz gemacht (mithilfe der WebLogic-Arbeitsmanager). – BonanzaOne

Antwort

1

Da Sie diese Konfiguration für eine spezifische MDB vornehmen möchten, könnten Sie sie zuerst einem dedizierten Pool zuweisen. Siehe this answer.

Dann können Sie Ihre Poolattribute dynamisch aktualisieren, indem Sie unter this article nachsehen, wie Sie ejb3-Pools mithilfe der Konfiguration jboss-cli oder standalone.xml konfigurieren oder hinzufügen können. (Mit JBOSS 7, aber es sollte nicht so verschieden sein, mit Wildfly 10)

Der folgende Jboss-cli Befehl dann verwendet werden, könnte Ihre Poolgröße dynamycally wie es standardmäßig auf 20 für MEB zu ändern:

/subsystem=ejb3/strict-max-bean-instance-pool=myPool:write-attribute(name=max-pool-size)

Schließlich scheint es, dass Sie auch die Konfigurationseigenschaft 'maxSession' für die Aktivierung in Ihrer MDB konfigurieren müssen. Für die kontextabhängige Konfiguration siehe this thread und this question.

+0

Ich war in der Lage, den Pool mit Max Pool 50 zu erstellen und es mit der MDB zu verknüpfen, aber wenn ich 50 Nachrichten in die Warteschlange hinzufügen, werden nur 15 zu jeder Zeit verbraucht (vorheriger Standardwert). Ich habe diesen Befehl verwendet, um den Pool zu erstellen '/ subsystem = ejb3/strict-max-beaninstanzpool = dummyPool /: add (max-pool-size = 50, timeout = 5, timeout-unit = MINUTES)' und verwendet '@ Pool' Annotation und sogar' jboss-ejb3.xml' auf der MDB, aber der Server beschränkt es immer noch auf 15 Instanzen. Die Aktivierung von 'maxSession' ist statisch. Weißt du, was es sein könnte? Ich habe auch versucht, den Server neu zu starten, aber es hat nicht funktioniert. – BonanzaOne

+0

Ich fand auch [diesen Artikel] (http://www.mastertheboss.com/javaee/ejb-3/custom-pool-configuration-for-your-ejbs-on-jboss-as-7-wildfly), aber folgende Diese Schritte haben nicht dazu geführt, dass mein MDB mit meinem benutzerdefinierten Pool funktioniert. – BonanzaOne

+0

Haben Sie versucht, die Konfigurationseigenschaft maxSession activation festzulegen? Siehe diese Frage und zugehörige Antwort für die kontextabhängige Konfiguration von maxSession: http://stackoverflow.com/questions/34030422/how-to-make-mdb-activation-spec-contextual-properties-configurable –