Публикация реализации подписки с помощью Spring JMS

У меня есть реализация очереди JMS с JmsTemplate. Я хочу иметь более одного слушателя, когда сообщение помещается в очередь, т.е. я хочу использовать тему вместо очереди.

У меня есть конфигурация без пространства имен JMS. Какие изменения необходимо внести, чтобы несколько слушателей прослушивали тему, когда кто-то отправляет сообщение в теме.


person Ali786    schedule 12.05.2014    source источник


Ответы (1)


Я думаю, вы, вероятно, используете DefaultMessageListenerContainer. На всякий случай вам нужно, чтобы несколько отдельных компонентов получали одно и то же сообщение (т. е. вы не хотите обрабатывать сообщения параллельно).

Предполагая, что я получил это право, и компонент A и компонент B должны получать одно и то же сообщение, вы просто создаете два экземпляра DefaultMessageListenerContainer в одной и той же теме и устанавливаете свойство pubSubDomain на true. Убедитесь, что вы не установили параллелизм в контейнере прослушивателя, или, что еще лучше, установите для параллелизма значение 1, чтобы сделать это явным.

Это даст что-то вроде

<bean id="listener1"
      class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="pubSubDomain" value="true"/>
    <property name="concurrency" value="1"/>
    <property name="destinationName=" value="...."/> <!-- topic name -->
    <property name="messageListener" ref="...."/> 
</bean>

Затем вы должны создать аналогичный компонент для второго компонента.

person Stephane Nicoll    schedule 12.05.2014
comment
Большое спасибо за ответ - person Ali786; 13.05.2014