Вопрос

Я настраиваю слушателя подписчика JMS следующим образом с целью достижения пула из 5 потоков, слушающих топатопик, однако, что я вижу во время выполнения, - это несколько потребителей, обрабатывающих одну и ту же запись (recordcount*#потребителей).

Я предполагаю, что делаю что -то не так, учитывая, что я новичок в весне.

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

Кто -нибудь может указать мне в направлении для достижения моей цели?

Это было полезно?

Решение

Взглянуть на параллелизм Настройка на конфигурацию контейнера для прослушивателя. А Весна JMS DOC предполагает, что параллелизм должен быть установлен на 1 для прослушивателей тем. Смотри ниже.

Параллелизм: количество параллельных сессий/потребителей, чтобы начать для каждого слушателя. Может быть либо простое число, указывающее максимальное число (например, «5»), либо диапазон, указывающий как нижний, а также верхний предел (например, 3-5 »). Обратите внимание, что указанный минимум является лишь намеком и может быть проигнорирован во время выполнения. По умолчанию 1; Сохраняйте параллелизм ограниченным до 1 в случае прослушивателя темы или если важный заказ очереди важен; Подумайте о том, чтобы поднять его для общих очередей.

Эта почта похож на остальную часть вашего вопроса.

Если вам нужно несколько потоков, чтобы не отставать от объема сообщений, ваш слушатель сообщений может делегировать на пружину Taskexecutor обработать сообщения асинхронно. Taskexecutors может быть поддержан рядом реализаций, включая пул потоков.

Другие советы

Если вы хотите, чтобы данное сообщение было поглощено одним и только одним потребителем, вам следует использовать очередь вместо темы. Тематическое сообщение транслируется всем доступным потребителям.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top