Невозможно использовать тот же clientId на кластерной архитектуре 3 HA - PullRequest
0 голосов
/ 20 апреля 2020

Я использую кластер ActiveMQ Artemis из 3-х брокеров (1 ведущий, 2 подчиненных), настройка с широковещательной передачей UDP.

ActiveMQ Artemis запускается, как и ожидалось, но при попытке создать соединения JMS с использованием SAG webMethods возвращает ошибка:

clientID=activemq was already set into another connection

У меня есть 3 сервера интеграции, каждый из которых настроен с этой конфигурацией JNDI, указывая на 3 брокера ActiveMQ Artemis:

  • Фабрика начального контекста : org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
  • URL-адрес поставщика : tcp://S1:9000?sslEnabled=true&ha=true&reconnectAttempts=-1
  • Список отработки отказа URL-адреса поставщика : tcp://S2:9000?sslEnabled=true,tcp://S3:9000?sslEnabled=true

Мне нужно подключить серверы веб-методов T1, T2 и T3 к кластеру ActiveMQ Artemis. На сервере T1 мне удается установить sh JMS-соединение с activemq в качестве clientID. Но на остальных серверах веб-методов T2 и T3 возвращается ошибка clientID=activemq was already set into another connection.

ActiveMQ Artemis поддерживает JMS 2.0, и несколько клиентов, указывающих на один и тот же идентификатор клиента / адресата, должны быть правы? Это позволяет общую подписку.

Что мне здесь не хватает? Я вообще не создавал topi c, я только хочу сначала установить sh соединения JMS на 3 серверах.

1 Ответ

0 голосов
/ 20 апреля 2020

ActiveMQ Artemis поддерживает JMS 2.0 и, следовательно, разделяемые долговременные подписки, но в разделе 6.1.2 спецификации JMS 2 говорится:

Цель идентификатора клиента - связать соединение и его объекты с состояние, поддерживаемое от имени клиента поставщиком. По определению, состояние клиента, идентифицируемое идентификатором клиента, может «использоваться» только одним клиентом за один раз. Поставщик JMS должен запретить одновременное использование его клиентами-исполнителями.

. ..

Единственным использованием идентификатора клиента, определенного JMS, является его обязательное использование при идентификации неразделенной долговременной подписки или ее необязательное использование при идентификации общей надежной или недлительной подписки. [выделено мной]

Поэтому причина, по которой вы получаете исключение, заключается в том, что вы пытаетесь нарушить спецификацию JMS. Укажите уникальный идентификатор клиента для каждого абонента длительного пользования или просто опустите идентификатор клиента, если вы используете общую гарантированную подписку.

...