Модуль кластеризации и JMS - PullRequest
       37

Модуль кластеризации и JMS

2 голосов
/ 17 августа 2010

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

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

Какможно / нужно ли это сделать?Я не в курсе?

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

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

Ответы [ 2 ]

1 голос
/ 17 августа 2010

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

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

0 голосов
/ 17 августа 2010

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

...