Как обмениваться сообщениями, опубликованными в теме, между несколькими виртуальными машинами в Spring Jms Tibjms - PullRequest
0 голосов
/ 07 декабря 2018

Мое приложение использует сообщения, опубликованные в теме.У меня есть 3 сервера, на которых выполняется код моего приложения.В текущей реализации сообщения распределяются по всем работающим виртуальным машинам, т. Е. Копия сообщения принимается каждым потребителем.

Мое требование состоит в том, чтобы каждый потребитель получал отдельное сообщение, т.е. ни один потребитель не должен получать одно и то же сообщение.

Ниже приведены библиотеки, которые я использую:

  1. spring jms 4.2.7
  2. Java jms 2.0
  3. tibco jms 8.0
  4. wildfly-swarm as server

В настоящее время у меня есть следующая конфигурация:

TibjmsConnectionFactory factory = new TibjmsConnectionFactory("server-url");
factory.setUserName("username");
factory.setUserPassword("password");
factory.setClientID("clientId");

DefaultMessageListenerContainer listener = new DefaultMessageListenerContainer();
listener.setPubSubDomain(true);
listener.setMessageListener(myMessageListener);
listener.setDestination(new TibjmsTopic("topic"));
listener.setConnectionFactory(factory);
listener.setSessionTransacted(true);
listener.setSessionAutoAcknowledged(Session.CLIENT_ACKNOWLEDGE);
listener.setSubscriptionDurable(true);
listener.setDurableSubscriptionName("subscription");
listener.setSubscriptionShared(true);

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

Чтобы добавить, я указал одинаковое DurableSubscriptionName, но отдельный ClientId для всех запущенных экземпляров.

Какая конфигурация мне не хватает?Может кто-нибудь помочь, пожалуйста?Большое спасибо заранее.:)

1 Ответ

0 голосов
/ 07 декабря 2018

Не используйте тему, используйте очередь ... Темы по дизайну являются pub / sub, и все подписчики на тему будут получать все опубликованные сообщения.Очереди «один в один», если в очереди несколько потребителей, каждый получает разные сообщения.

...