Question

Je suis en train de créer un écouteur d'abonné JMS comme suit dans le but de parvenir à un pool de 5 fils écoutant topATopic, cependant, ce que je vois à l'exécution est plusieurs consommateurs de traitement le même enregistrement (recordCount * Nombre de consommateurs).

Je suppose que je fais quelque chose de mal étant donné que je suis nouveau au printemps.

<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>

Quelqu'un peut-il me s'il vous plaît point dans une direction pour atteindre mon objectif?

Était-ce utile?

La solution

Jetez un oeil à la mise en concurrency sur la configuration de votre conteneur d'écoute. doc JMS Spring suggère que la concurrence doit être réglé sur 1 pour les auditeurs sujet. Voir ci-dessous.

concurrency: Le nombre de sessions simultanées / consommateurs pour commencer à chaque auditeur. Peut être soit un nombre simple, indiquant le nombre maximal (par exemple, « 5 ») ou une plage indiquant le plus faible aussi bien que la limite supérieure (par exemple, « 3-5 »). Notez qu'un minimum spécifié est juste un soupçon et peut être ignoré lors de l'exécution. Par défaut est 1; keep limité à 1 concurrence en cas d'un écouteur sujet ou si la commande de file d'attente est importante; envisager d'augmenter pour les files d'attente générales.

Cette est similaire publier au reste de votre question.

Si vous avez besoin de plusieurs threads pour maintenir un volume de messages, votre auditeur de message peut déléguer à un ressort TaskExecutor pour traiter les messages de façon asynchrone. TaskExecutors peuvent être soutenus par un certain nombre de mises en œuvre, y compris du pool de threads.

Autres conseils

Si vous voulez un message donné à être consommé par un et un seul consommateur, vous devez utiliser une file d'attente au lieu d'un sujet. Un message Sujet est diffusé à tous les consommateurs disponibles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top