Domanda

Sto installando un abbonato ascoltatore JMS come segue, con l'obiettivo di raggiungere un pool di 5 filetti ascolto topATopic, però, quello che vedo in fase di esecuzione è più consumatori di elaborazione dello stesso record (RecordCount * # dei consumatori).

Io parto dal presupposto che sto facendo qualcosa di sbagliato considerando Sono nuovo di primavera.

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

Qualcuno può per favore mi punto in una direzione per raggiungere il mio obiettivo?

È stato utile?

Soluzione

Date un'occhiata alla della concorrenza l'impostazione della configurazione del contenitore di ascoltatore. Spring JMS doc suggerisce che la concorrenza dovrebbe essere impostato 1 per gli ascoltatori argomento. Vedi sotto.

concorrenza: il numero di sessioni simultanee / consumatori per avviare per ogni ascoltatore. Può essere un semplice numero che indica il numero massimo (ad esempio "5") o un intervallo che indica il basso così come limite superiore (ad esempio "3-5"). Si noti che un minimo specificato è solo un suggerimento e può essere ignorato in fase di esecuzione. Il valore predefinito è 1; tenere la concorrenza limitata a 1 in caso di un argomento ascoltatore o se coda di ordinamento è importante; considerare alzandola per le code generali.

Questo inviare è simile al resto della tua domanda.

Se avete bisogno di più thread di tenere il passo con il volume dei messaggi, il vostro ascoltatore messaggio potrebbe delegare ad una molla TaskExecutor per elaborare i messaggi in modo asincrono. TaskExecutors possono essere sostenute da una serie di implementazioni tra cui Discussione piscina.

Altri suggerimenti

Se si desidera che un dato messaggio per essere consumato da una e una sola consumatori, è necessario utilizzare una coda invece di un argomento. Un messaggio di Topic viene trasmesso a tutti i consumatori disponibili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top