获取MQJE001后出现重复消息:发生MQException:完成代码' 2',原因' 2018'

时间:2014-09-16 05:16:56

标签: java duplicates ibm-mq

我有以下情况:

我将消息放入MQ队列,而其他一些应用程序正在同一队列中进行轮询。我遇到过这样的情景:

我的应用程序尝试将消息放入队列,但遇到 MQJE001:发生了MQException:完成代码' 2',原因' 2018' 。如果我的应用程序无法将消息放入队列,我有一个重试逻辑。所以我的应用程序试图将消息放入队列中。这次它能够再次将消息放入队列中。现在问题出现的是另一个轮询队列消息的应用程序,收到两条消息。

我正在使用MQ服务器版本7.0.1.8和MQ客户端版本7.0.1.5。

我的怀疑如下:

  1. 为什么消息在队列中放了两次,即使我第一次遇到 MQJE001:发生了MQException:完成代码&#39; 2&#39;,原因&#39; 2018&#39; < /强>

  2. MQ中是否有 autocommit 标志?我在哪里可以获得更多细节?我已经完成谷歌,但没有得到适当的信息。我检查了下面的链接,但没有任何与MQ自动提交标志相关的信息。 Committing and backing out units of work

  3. 服务器版本和客户端版本的区别是否重要?

  4. APAR IV22989开始,我看到IBM针对MQJE001进行了修复:发生了MQException:完成代码&#39; 2&#39;,Reason&#39; 2018&#39; 。这仅适用于V7.1和V7.5吗?

1 个答案:

答案 0 :(得分:1)

首先,我建议至少更新您正在使用的客户端版本; 7.0.1.12是最新的。适用于QM的维护也很有用。水平的差异可能是问题,但我建议获得最近的水平将是一个很好的做法。设计是这样的,差异无关紧要 - 特别是如果使用客户端模式(TCP / IP),这提供了一个额外的

我假设这是Java的类而不是您使用的JMS API?在这种情况下,将通过选择您选择的同步点选项来控制提交。

JMS具有自动确认消息的概念;听起来像这里消息被放在同步点(事务)之外,因此出现在队列中。出现问题并再次发送消息。通常,这是应用程序响应错误的良好实践,但是如果没有放入事务,则重复消息是一种风险。