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