JMS 1.1 持久订阅 - 无法设置客户端 ID
JMS 1.1 durable subscription - can't set Client ID
我正在尝试使用 JMS 1.1 设置持久订阅,但我遇到了第 22 条军规:
- 如果我不设置 clientID,我会收到“clientID 不能为空”错误...
- 如果我尝试设置它,我得到:
com.ibm.msg.client.jms.DetailedIllegalStateException:JMSCC3031:使用连接后无法设置客户端 ID。
连接的客户端 ID 只能设置一次,并且只能在使用连接之前设置。
在使用连接之前设置客户端 ID。
我该如何解决这个问题?如何建立连接 'unused'?
或者 - 如异常消息所示 - 在使用连接之前如何设置 ID?
我的代码片段:
public class BbsListener implements MessageListener {
...
public BbsListener(BbsListenerConfig config) {
try {
Context context = new InitialContext();
TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) context.lookup(config.getConnectionFactoryName());
TopicConnection topicConnection = topicConnectionFactory.createTopicConnection();
topicConnection.setClientID("ID");
TopicSession topicSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = (Topic) context.lookup(config.getTopicName());
topicSubscriber = topicSession.createDurableSubscriber(topic, "EAMPtestSubscriber");
topicSubscriber.setMessageListener(this);
topicConnection.start();
}
...
谢谢
您的应用似乎是 运行 在 Java EE 应用程序服务器上。如果是这种情况,您需要注意使用何种类型的连接工厂以及在何处调用 setMessageListener()
。首先,“出站”连接工厂用于发送消息(因此名称为“出站”)。这是 JCA 的一部分。其次,您不能在 EJB 中调用 setMessageListener()
,因为规范不允许这样做。我建议您只使用普通的 JMS 连接工厂,而不是来自应用程序服务器的池化连接工厂。
我正在尝试使用 JMS 1.1 设置持久订阅,但我遇到了第 22 条军规:
- 如果我不设置 clientID,我会收到“clientID 不能为空”错误...
- 如果我尝试设置它,我得到: com.ibm.msg.client.jms.DetailedIllegalStateException:JMSCC3031:使用连接后无法设置客户端 ID。 连接的客户端 ID 只能设置一次,并且只能在使用连接之前设置。 在使用连接之前设置客户端 ID。
我该如何解决这个问题?如何建立连接 'unused'? 或者 - 如异常消息所示 - 在使用连接之前如何设置 ID?
我的代码片段:
public class BbsListener implements MessageListener {
...
public BbsListener(BbsListenerConfig config) {
try {
Context context = new InitialContext();
TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) context.lookup(config.getConnectionFactoryName());
TopicConnection topicConnection = topicConnectionFactory.createTopicConnection();
topicConnection.setClientID("ID");
TopicSession topicSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = (Topic) context.lookup(config.getTopicName());
topicSubscriber = topicSession.createDurableSubscriber(topic, "EAMPtestSubscriber");
topicSubscriber.setMessageListener(this);
topicConnection.start();
}
...
谢谢
您的应用似乎是 运行 在 Java EE 应用程序服务器上。如果是这种情况,您需要注意使用何种类型的连接工厂以及在何处调用 setMessageListener()
。首先,“出站”连接工厂用于发送消息(因此名称为“出站”)。这是 JCA 的一部分。其次,您不能在 EJB 中调用 setMessageListener()
,因为规范不允许这样做。我建议您只使用普通的 JMS 连接工厂,而不是来自应用程序服务器的池化连接工厂。