Кластеризованные темы ActiveMQ и отказоустойчивость с точки зрения производителя

#java #jms #activemq

#java #jms #activemq

Вопрос:

Я хочу настроить несколько узлов JMS (брокеров), которые имеют несколько тем. Недавно я обнаружил функцию отработки отказа (http://activemq.apache.org/failover-transport-reference.html#FailoverTransportReference-BrokersideOptionsforFailover ), который позволяет распределять потребителей между всеми узлами брокера перенаправляет в случае сбоя целевого узла. Я новичок в JMS и ActiveMQ, и, возможно, мой вопрос прозвучал бы глупо, но в любом случае:

Интересно, поддерживает ли ActiveMQ распределенные темы с точки зрения производителя, поэтому, когда производитель публикует сообщение, оно появляется в кластере, а не в одном узле кластера (туда, где производитель его публикует). Причина, по которой я заинтересован в такого рода функциях, заключается в том, что я боюсь, что если этот единственный узел (где производитель публикует сообщение) выйдет из строя, тогда производитель не сможет публиковать сообщения, пока этот узел снова не заработает. Но было бы намного надежнее, если бы производитель мог опубликовать сообщение в кластере (так же, как производитель использует функцию отработки отказа), и если исходный узел держателя темы не работает, тогда сообщение просто перенаправляется на другие узлы брокера. Я искал несколько примеров и не смог их найти. Может ли кто-нибудь дать подсказку, поддерживает ли ActiveMQ такую функцию? Спасибо

Ответ №1:

Да, вы объединяете схему failover: для обеспечения восстановления на стороне клиента, а затем используете посредническую сеть на стороне сервера для распространения сообщений среди других потребителей в кластере.

Комментарии:

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

2. @Andrey master slave могут помочь со сценариями восстановления сообщений. в 99% случаев рекомендуется не использовать какую-либо специфичную для приложения обработку сообщений. Существует ряд готовых опций, включая транзакции и другие настройки.. это зависит от вашего варианта использования, объема, серверной среды, языка программирования, протокола и т.д.. Я предлагаю вам проконсультироваться с экспертом в течение недели или около того, чтобы рассказать вам обо всем, если это критически важные для бизнеса данные.

3. @Andrey если вам понравился ответ, не могли бы вы принять его, спасибо =)

4. большое спасибо за ваши усилия, теперь схема заполнена, мне просто нужно ее реализовать 🙂