【发布时间】:2014-01-01 05:08:20
【问题描述】:
JMS 消息有时会在不引发任何异常的情况下移至 DLQ。 使用的 Jboss 服务器实例是 4.3.0.GA_CP04_EAP。
我们正在使用一个 MDB 来侦听队列 A 上的传入消息,当它收到任何消息时,它会更新数据库并在一个事务中感应一封电子邮件。事务是 CMT。
现在,正在发生的事情是,有时消息没有被消费者接收,最终进入 DLQ。虽然从 JMX 控制台消息计数中我可以看到该消息曾经到达队列 A,但随后进入 DLQ。
这种情况会间歇性发生,也不会在日志上引发任何异常。
大多数情况下似乎有效的是重新启动服务器。但不知道幕后发生了什么。
**29 天后,同样的问题又回来了。 这遵循一种模式,但随着每次重新启动而变化。 有 2 个集群服务器也可以进行负载平衡,P1 和 P2。 前两封电子邮件由 P1-Email 发送并处理 下一封电子邮件请求转到 P2-已发送的电子邮件 接下来的两封电子邮件由 P1-Email 发送并处理 下一封电子邮件请求转到 P2-未发送电子邮件 并且循环重复
感谢http://leakfromjavaheap.blogspot.in/2013/05/when-dead-letter-queue-becomes-zombie.html提供的有用信息,我找到了解决这个烦人问题的方法
DLQ 侦听器设置为侦听任何传入消息,如果在 DLQ 上找到任何消息,则将它们放回预期目的地。 此外,考虑到任何消息在无限循环中从 DLQ 到 Queue 并返回 DLQ 的情况,设置一个计数器来检查消息之前到达 DLQ 的次数,如果超过限制,则它被放入永久 DLQ(DLQ 为 DLQ)。 从那以后,应用程序一直运行顺利。
【问题讨论】:
标签: jboss jms message-driven-bean