jms 2 общий подписчик

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

Сначала я подумал, что это может быть наше приложение или то, как мы использовали SpringJMS, поэтому я создал пример приложения, которое создает 3 фабрики соединений. Затем эти фабрики используются для создания сообщения, отправляемого в тему, и двух прослушивателей в одном приложении (но, поскольку они используют другую фабрику соединений и идентификатор клиента, они должны быть полностью отдельными), но все же оба прослушивателя сообщений для двух соединений получают сообщение.

Я пытался запустить это как против HornetQ, так и против Tibco и получил тот же результат.

потребители сообщений, созданные следующим образом в классе, который реализует MessageListener

Connection connection = factory.createConnection(userName, password);
Session session = connection.createSession();
MessageConsumer topicReceiver = session.createSharedConsumer(topic, SUBSCRIPTION_NAME);
topicReceiver.setMessageListener(this);
connection.start();

Кто-нибудь, кто успешно использовал общих потребителей из JMS 2.0, указал мне направление того, что мне не хватает?


person Chris Hudson-Silver    schedule 16.12.2015    source источник


Ответы (1)


похоже, у меня должен быть RTFM. Из спецификации JMS 2.0:

"Общая краткосрочная подписка идентифицируется по имени, указанному клиентом, и по идентификатору клиента, если он установлен. Если идентификатор клиента был установлен при первом создании общей краткосрочной подписки, то клиент, который впоследствии желает создать потребителя в этой общей краткосрочной подписке должен использовать тот же идентификатор клиента."

Поэтому, поскольку несколько клиентов не могут иметь один и тот же идентификатор клиента, вам не следует устанавливать идентификатор клиента, если вы хотите использовать общие подписки (постоянные или временные).

person Chris Hudson-Silver    schedule 04.01.2016
comment
Я также сталкиваюсь с той же проблемой, т.е. все потребители получают копию сообщения. Вот моя ссылка на вопрос о стеке: t" title="как обмениваться сообщениями, опубликованными по теме, между несколькими виртуальными машинами весной jms t"> stackoverflow.com/questions/53672925/ Не могли бы вы подсказать, что мне не хватает? Я попытался удалить clientId, но это тоже не помогло. Заранее спасибо. :) - person G.G.; 10.12.2018