【发布时间】:2019-10-18 16:57:03
【问题描述】:
我正在尝试连接到安慰队列并简单地从中读取消息。但是,我能够阅读消息,但消息没有从队列中删除。 以下是我尝试过的代码:
public void clearMessages() throws Exception {
// Programmatically create the connection factory using default settings
// Create connection to the Solace router
SolXAConnectionFactoryImpl connectionFactory = returnConnFactory();
XAConnection connection = connectionFactory.createXAConnection();
XASession session = connection.createXASession();
Queue queue = session.createQueue(QUEUE_NAME);
connection.start();
MessageConsumer messageConsumer = session.createConsumer(queue);
//session.b
messageConsumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
if(message instanceof SolTextMessage) {
SolTextMessage solTextMessage =(SolTextMessage)message;
try {
System.out.println("Message cleared is : "+solTextMessage.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else {
System.out.println("Message Content: %s"+ SolJmsUtility.dumpMessage(message));
}
latch.countDown();
}
});
latch.await(120,TimeUnit.SECONDS);
connection.stop();
messageConsumer.close();
session.close();
connection.close();
}
这里的latch是CountDownLatch的对象,初始化为:
CountDownLatch latch = new CountDownLatch(2);
【问题讨论】:
-
你为什么使用
XAConnection? XA 用于在单个事务中涉及多个资源(例如 JMS、数据库等)并且工作需要在它们之间以原子方式提交或回滚的情况。您似乎在这里只涉及一个资源(即 JMS)。在不一定使用 XA 时使用 XA 会使您的代码复杂化并降低性能。 -
因为否则我会得到“非 xasession 无法绑定到 xa 端点”