Сеть брокеров ActiveMQ с длительной подпиской - PullRequest
0 голосов
/ 06 января 2012

У меня есть небольшая проблема с моим образцом макета JMS.

У меня есть два брокера (A, B) на двух машинах, которые связаны через сетевой разъем. Идея заключается в том, что производитель может отправить любому брокеру, а потребитель может прослушать любого брокера, и тема для отправки / получения доступна по всему миру.

В теме есть два постоянных клиентских клиента (по одному на каждой машине), которые оба будут обрабатывать все сообщения в теме. Я хочу, чтобы это была долговременная подписка, чтобы процессы не теряли рабочую нагрузку, если процесс необходимо перезапустить. Оба клиента-подписчика настроены на использование URL-адреса отказоустойчивого посредника, поэтому они сначала пытаются подключиться к своему локальному посреднику и, если он недоступен другому. Отказ клиента, похоже, работает, но я обнаружил проблему в следующей ситуации:

К каждому посреднику «А» и «В» подключен клиентский клиент. Производитель отправляет «А». Брокер 'B' перезапускается. Клиент 'B' регистрирует потерю соединения и переключается в 'A'. Снова появляется «B», и поскольку он сам зарегистрирован в качестве постоянного абонента на «A», он получает фид сообщений. Сейчас у него нет активного долгосрочного абонента (теперь у «А» их три, включая «В»), и он накапливается до тех пор, пока не достигнет пределов своего соединения.

Моя конфигурация неверна? Возможно ли то, что я намеревался?

Cheers, Кай

1 Ответ

0 голосов
/ 09 января 2012
  1. Используете ли вы конфигурацию master-slave?
  2. Почему вы хотите, чтобы оба брокера имели подключенных клиентов одновременно?

Если вы используете строку аварийного подключения (определяя в ней обоих брокеров), ваши потребители / производители будут использовать ActiveMQреализация аварийного переключения и будет подключаться / повторно подключаться к активному узлу при необходимости.Я не думаю, что наличие двух активных экземпляров с активными клиентами - хорошая идея - если только вы не пытаетесь дублировать свои процессы (в этом случае синхронизация не будет)

Чтобы сделать оба узла (главный и подчиненный)чтобы всегда иметь одинаковые данные длительного пользования, вам нужно
, чтобы сохранить ваши сообщения в одном и том же месте, доступном для обоих узлов.Это может быть адаптер JDBC, подключенный к одному экземпляру базы данных (возможно, за кластером), или это может быть NAS с общей сетевой папкой для KahaDB.

...