Frage

Ich richte einen JMS -Abonnenten -Hörer wie folgt ein, um einen Pool von 5 Threads zu erreichen, die Topatopic anhören. Ich sehe jedoch zur Laufzeit mehrere Verbraucher, die denselben Datensatz (RecordCount*#der Verbraucher) verarbeiten.

Ich gehe davon aus, dass ich etwas falsch mache, wenn man bedenkt, dass ich neu im Frühling bin.

<bean id="messageListener" class="com.abc.app.mdp.Receiver">
<property name="bean" ref="bean" />
</bean>

<jms:listener-container container-type="default"
connection-factory="connectionFactory" acknowledge="auto" concurrency="5" destination-type="topic" prefetch="1" cache="none" >
<jms:listener destination="topCli_Service" ref="messageListener" 
method="onMessage" subscription="AProjectSubscriber" />
</jms:listener-container>

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryB ean">
<property name="jndiName" value="jms/jms-top-notx" />
</bean>

Kann mir jemand bitte in eine Richtung hinweisen, um mein Ziel zu erreichen?

War es hilfreich?

Lösung

Schauen Sie sich das an die Parallelität Einstellen in Ihrer Listener -Containerkonfiguration. Das Spring JMS Doc schlägt vor, dass die Parallelität auf 1 für Themenhörer eingestellt werden sollte. Siehe unten.

Parallelität: Die Anzahl der gleichzeitigen Sitzungen/Verbraucher, die für jeden Hörer beginnen können. Kann entweder eine einfache Zahl sein, die die maximale Zahl (z. B. "5") oder einen Bereich angibt, der sowohl die untere als auch die obere Grenze (zB "3-5") angibt. Beachten Sie, dass ein bestimmtes Minimum nur ein Hinweis ist und zur Laufzeit ignoriert werden kann. Standard ist 1; Halten Sie die Parallelität im Falle eines Themas -Hörers auf 1 begrenzt oder wenn die Warteschlangenordnung wichtig ist; Erwägen Sie, es für allgemeine Warteschlangen zu erheben.

Dieser Beitrag ähnelt dem Rest Ihrer Frage.

Wenn Sie mehrere Themen benötigen, um mit dem Nachrichtenvolumen Schritt zu halten, kann Ihr Nachrichten -Listener eine Feder delegieren Taskexecutor Um die Nachrichten asynchron zu verarbeiten. Taskexecutors können durch eine Reihe von Implementierungen einschließlich Threadpool unterstützt werden.

Andere Tipps

Wenn Sie möchten, dass eine bestimmte Nachricht von einem und nur von einem Verbraucher verzehrt wird, sollten Sie eine Warteschlange anstelle eines Themas verwenden. Eine Themennachricht wird an alle verfügbaren Verbraucher übertragen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top