我有以下情况:
我将消息放入MQ队列,而其他一些应用程序正在同一队列中进行轮询。我遇到过这样的情景:
我的应用程序尝试将消息放入队列,但遇到 MQJE001:发生了MQException:完成代码' 2',原因' 2018' 。如果我的应用程序无法将消息放入队列,我有一个重试逻辑。所以我的应用程序试图将消息放入队列中。这次它能够再次将消息放入队列中。现在问题出现的是另一个轮询队列消息的应用程序,收到两条消息。
我正在使用MQ服务器版本7.0.1.8和MQ客户端版本7.0.1.5。
我的怀疑如下:
为什么消息在队列中放了两次,即使我第一次遇到 MQJE001:发生了MQException:完成代码&#39; 2&#39;,原因&#39; 2018&#39; < /强>
MQ中是否有 autocommit 标志?我在哪里可以获得更多细节?我已经完成谷歌,但没有得到适当的信息。我检查了下面的链接,但没有任何与MQ自动提交标志相关的信息。 Committing and backing out units of work
服务器版本和客户端版本的区别是否重要?
从APAR IV22989开始,我看到IBM针对MQJE001进行了修复:发生了MQException:完成代码&#39; 2&#39;,Reason&#39; 2018&#39; 。这仅适用于V7.1和V7.5吗?
答案 0 :(得分:1)
首先,我建议至少更新您正在使用的客户端版本; 7.0.1.12是最新的。适用于QM的维护也很有用。水平的差异可能是问题,但我建议获得最近的水平将是一个很好的做法。设计是这样的,差异无关紧要 - 特别是如果使用客户端模式(TCP / IP),这提供了一个额外的
我假设这是Java的类而不是您使用的JMS API?在这种情况下,将通过选择您选择的同步点选项来控制提交。
JMS具有自动确认消息的概念;听起来像这里消息被放在同步点(事务)之外,因此出现在队列中。出现问题并再次发送消息。通常,这是应用程序响应错误的良好实践,但是如果没有放入事务,则重复消息是一种风险。