Spring Jms Tibjms中如何在多个VM之间共享在主题上发布的消息

时间:2018-12-07 15:56:31

标签: java spring-jms tibco jms-topic wildfly-swarm

我的应用程序正在使用发布到主题的消息。我有3台运行我的应用程序代码的服务器。在当前的实现中,消息将分发到所有正在运行的VM,即每个消费者都将收到消息的副本。

我的要求是,每个消费者都应该收到不同的消息,即没有两个消费者应该收到相同的消息。

以下是我正在使用的库:

  1. spring jms 4.2.7
  2. Java jms 2.0
  3. tibco jms 8.0
  4. 野生苍蝇作为服务器

当前我具有以下配置:

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 :(得分:1)

不使用主题,使用队列...设计使主题为pub / sub,主题的所有订阅者都将收到所有已发布的消息。队列是一对一的,如果队列中有多个使用者,每个使用者都会收到不同的消息。