2015-05-21 5 views
2

Я использую несколько <si:service-activator> и <jms:message-driven-channel-adapter>, чтобы подписаться на несколько очередей и тем. Сообщения от каждого получателя принимаются в отдельном потоке, что означает, что мой код приема заполнен замками для защиты изменчивого внутреннего состояния.Spring-integration/ActiveMQ подписаться на несколько адресов в одном потоке

Я хочу, чтобы мой код получения был заблокирован. Можно ли настроить функцию spring-integration/activemq для приема из нескольких пунктов назначения в одном потоке?

Если это не возможно, я могу думать о двух альтернатив:

  1. Начните свой собственный поток обработки, которая считывает из очереди блокировки, положить все полученные сообщения в этой очереди.

  2. Отправляйте все полученные сообщения в один пункт назначения и используйте их.

У кого-нибудь есть идеи?

ответ

1

Используйте wildcard pattern в одной очереди.

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

, а именно: "QUEUE.NR1,QUEUE.NR2" или "SOME.PREFIX.>", чтобы прочитать все очереди с этим префиксом. Код клиента обрабатывает это как одну очередь.

+0

Да, это действительно работает. Примечание: очереди, подписанные с помощью подстановочных знаков (даже 2 разделенные запятой), не отображаются на веб-консоли до тех пор, пока не будет получено первое сообщение. Следующая проблема заключается в том, как смешивать очереди и темы с подстановочными знаками? – zool

+0

Используйте VirtualTopics, чтобы использовать очереди для подписки на темы. В противном случае вы не можете смешивать. http://activemq.apache.org/virtual-destinations.html –

Смежные вопросы