2010-08-17 2 views
2

У меня есть модуль, который работает автономно в JVM (без контейнеров) и связывается с другими модулями через JMS. Мой модуль является одновременно производителем в одной очереди и потребителем в другой очереди. Мне нужно сгруппировать этот модуль как по причинам HA, так и по рабочей нагрузке, и я, вероятно, собираюсь пойти с Terracotta + Hibernate для кластеризации моих объектов. В настоящее время, когда мое приложение запускает его, запускается поток (через Executors.newSingleThreadExecutor()), который служит в качестве потребителя (я могу приложить пример фактического кода, если это необходимо и необходимо).Кластеризация модулей и JMS

То, что я понял из чтения вопросов здесь является то, что если я просто запустить свой модуль на N другом JVMs то N разных абоненты будут созданы и каждое сообщение в очереди прибудет N абонентов. Что бы я хотел сделать, это только один из них (давайте сейчас скажем, что это не важно) обрабатывает это сообщение, и поэтому на самом деле я могу обрабатывать N сообщений за раз.

Как это сделать/должно ли это быть сделано? Я в пути?

BTW, я использую OpenMQ в качестве моей реализации, но я не знаю, если это релевантно.

Спасибо за любую помощь.

ответ

1

Классический случай обработки сообщений в кластерной среде. Это то, что я сделал бы.

Использовать широковещательное сообщение (на основе канала) вместо очереди. Очередь, полезная для связи между точками, не очень эффективна. Установите срок действия сообщения до момента его потребления одним из потребителей. Таким образом, другие потребители даже не видят сообщение, и только один потребитель будет его использовать.

+0

Привет, Tushar, спасибо за вашу помощь. Что такое 'Broadcast message'? Это другое сообщение, которое отправляется в очередь JMS? Также, что вы имели в виду: «Очередь, полезная для связи между точками, не очень эффективна»? Спасибо – Ittai

+0

Я имел в виду использовать связь, основанную на теме, вместо связи на основе очереди, где вам нужно будет указать получателя при передаче сообщения или ему придется реализовать какую-то логику маршрутизатора, чтобы направить это сообщение конкретному потребителю на основе определенных критерии. –

+0

Привет, Tushar, я немного читал о теме против Queue, и ваши решения звучат превосходно. Единственное, что я не понял, это «Установить достоверность сообщения ...». Почему мне нужно установить его действительность? Не будет ли он потребляться одним потребителем по определению механизма темы? Иттай – Ittai

0

Взгляните на JGroups. Вы можете подумать о том, чтобы реализовать ваш модуль/подписчиков, чтобы использовать jgroups для такой синхронизации, в которой вы нуждаетесь. JGroups обеспечивают надежную многоадресную связь.

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