2

使用 java 应用程序,我正在尝试在 jms 统一分布式主题上创建持久订阅。

jms 服务器在 weblogic 10.3.5 上运行,主题分布在 2 个服务器上。

如果我正在开发一个消息驱动的 bean,它就可以工作。我在两台服务器上都有一个具有相同订阅名称的持久订阅。

使用独立的 java 应用程序,我可以使用普通主题(非分布式)来完成这项工作。但无法管理它与分布式主题一起使用。

InitialContext ic = new InitialContext();
TopicConnectionFactory connectionFactory = (TopicConnectionFactory) ic.lookup("myConnectionFactory");
TopicConnection connection = connectionFactory.createTopicConnection();
connection.setClientID("testclient");
TopicSession session = connection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
TopicSubscriber subscriber;
Topic topic1 = (Topic) ic.lookup("jmsserver1@myTopic");
Topic topic2 = (Topic) ic.lookup("jmsserver2@myTopic");
subscriber = session.createDurableSubscriber(topic1,"testSubscription","",false);
subscriber = session.createDurableSubscriber(topic2,"testSubscription","",false);

给我

Exception in thread "main" weblogic.jms.common.JMSException: [JMSClientExceptions:055037]Subscription testSubscription is in use

在 weblogic 控制台中,第一个订阅是创建的testSubscriptionmyJmsModule!jmsserver1@myTopic而不是第二个。

我能做些什么 ?

4

2 回答 2

2

您必须手动删除持久订阅,WLS 不会自动删除

https://docs.oracle.com/cd/E17904_01/web.1111/e15493/d​​ist_topics.htm#WLMDB10013

设置持久订阅的自动删除:-

您可以将 MDB 配置为在从服务器取消部署或删除 MDB 时自动删除持久主题订阅。要将 MDB 配置为自动删除持久主题订阅,请将持久订阅删除设置为 True。默认情况下,持久订阅删除设置为 False

默认情况下它是假的,因此它不会自动清除持久订阅者。

于 2014-11-13T10:16:32.300 回答
0

您需要通过 weblogic 管理控制台更改 ConnectionFactory 以创建可共享的连接

Client ID Policy: CLIENT_ID_POLICY_UNRESTRICTED
Subscription Sharing Policy:Sharable

https://docs.oracle.com/cd/E57014_01/wls/WLACH/pagehelp/JMSjmsconnectionjmsconnectionfactoryconfigclientparamstitle.html

于 2015-07-29T03:06:29.630 回答