我正在尝试从 Java 中的 MQ 队列中读取消息,当处理异常时需要回滚时,我对流程有点困惑。
我有一个循环运行并查找消息的阅读器类。当我初始化阅读器时,它会创建一个连接和一个会话。然后,当需要在循环中读取消息时,它会创建一个MQQueue
and MQQueueReceiver
。这工作正常,我从队列中得到一个 JMSMessage,然后将其交给另一个线程工作。如果工作线程失败,我想将该消息放回队列中(以便集群中的其他节点重试)。
我的问题是,我如何回滚?我注意到类rollback()
中有一个方法MQQueueSession
。但是我对我的所有消息都重用了同一个会话。我是否理解应该为每条消息创建一个新会话,而不是一遍又一遍地重复使用同一个会话?
这对我来说是反直觉的。
会话也是用connection.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);
. 我应该使用另一个标志,而不是CLIENT_ACKNOWLEDGE
?