Glassfish - Как передать сообщение JMS всем экземплярам в кластере?

Я использую Glassfish 3.1.2, и я настроил кластер с одним узлом и двумя экземплярами.

В моем приложении есть компонент, управляемый сообщениями, который подписывается на тему, которую я развернул в кластере.

Когда я публикую сообщение в теме, я хочу, чтобы оба экземпляра получили сообщение.

Однако на практике я обнаружил, что только один экземпляр получает сообщение.

Я полагаю, что я сталкиваюсь с функцией, называемой "общие подписки" http://docs.oracle.com/cd/E18930_01/html/821-2438/gjzpg.html

Функция (которая включена по умолчанию) говорит, что бины в кластере с одинаковым идентификатором клиента являются общими и фактически являются только одной подпиской.

Он говорит, что по умолчанию идентификатор клиента MDB является его именем, что означает, что оба моих экземпляра используют один и тот же идентификатор клиента.

Таким образом, помимо полного отключения этой функции, я хотел бы знать, возможно ли настроить MDB, чтобы каждый экземпляр подписывался с другим идентификатором клиента? Это кажется немного сложным, поскольку оба экземпляра используют один и тот же файл WAR. Я думаю, что вы можете установить идентификатор клиента в аннотации, но я не уверен, что это можно изменить во время выполнения...

1 ответ

Я не уверен, почему вы полностью отключили эту функцию. В предоставленной вами ссылке четко указано, что вы настраиваете это для ActivationSpec/MDB. Насколько я понимаю, это повлияет только на тот MDB, который у вас есть.

Для MDB установите для свойства ActivationSpec useSharedSubscriptionInClusteredContainer значение false. Сделайте это точно так же, как и с другими свойствами ActivationSpec, используя аннотации в самом MDB или в дескрипторе развертывания ejb-jar.xml или glassfish-ejb-jar.xml.

Но вы, конечно, можете динамически устанавливать идентификатор клиента для соединения во время выполнения. Обратите внимание, что вам, вероятно, придется самостоятельно обрабатывать соединение JMS, а не полагаться на функции, которыми управляет контейнер.

http://docs.oracle.com/javaee/6/api/javax/jms/Connection.html

Другие вопросы по тегам