哪些JMS代理实现允许重新发送消息保存在死信息队列中?

时间:2010-04-07 09:35:26

标签: jms administration

我想知道,如果有JMS代理,它允许管理员在解决导致问题后重新发送(通过GUI或任何工具)消息,保存在ded消息队列或死信队列中(例如数据库已关闭,空间不足) ...)。

WebSphere提供了一项功能来重新发送死信队列中保存的邮件:1
Glassfish 2.1.1使用Sun Java System Message Queue 4.4没有这方面的功能,我想是的。

其他JMS经纪商有哪些选择?或者,如果您依赖于消息,最好的方法是不使用DMQ / DLQ功能吗?

非常感谢

2 个答案:

答案 0 :(得分:1)

我可以回答WebSphere MQ,但不能回答任何其他JMS提供者。在WMQ的情况下,有几种工具,包括死信处理程序(DLH),它可以自动重试DLQ消息以解决QFULL等瞬态错误。例如,队列填满,入站消息溢出到DLQ。 DLH将开始重试这些消息,并且当队列耗尽时,它将自动替换它们在原始目标队列中。其他工具可用作WMQ SupportPacs。

一般的经验法则是必须有一些处理有害消息的过程。理想情况下,这将是特定于应用程序的异常队列,因为系统DLQ是共享的。我见过很多案例,其中多个应用程序将消息传递给DLQ,其中一个应用程序的支持团队清除了整个队列,而不仅仅是他们的消息。不好。

另一个需要注意的是,登陆DLQ的消息通常会导致消息序列中断。例如,队列填充和消息转到DLQ。当队列耗尽时,从DLQ重放消息,此时它们在到达时散布新消息。理想情况下,应用程序对消息排序问题不敏感,并且每条消息都是原子的。这是回答最终问题的关键。是否使用DLQ取决于应用程序是否对消息排序敏感(至少在WMQ中)。如果排序是一个问题,那么您没有选项让消息溢出到辅助队列并在新消息仍然到达时重播它们。在这种情况下更好的做法是让队列填满并关闭或关闭发送应用程序。

您可以在此处阅读有关DLH的更多信息:http://bit.ly/aYJ13q

WMQ SupportPacs在这里:http://bit.ly/bdSUfd(查看MA01和MO01)

答案 1 :(得分:0)

注意:我为CodeStreet工作

您可以做的一件事是使用CodeStreet“ReplayService for MQ”来记录DLQ中的所有消息,然后通过Web-GUI查看/搜索它们。

找到要重新发送的消息后,可以将它们拖放到任意MQ主题或队列,或者指定重播请求以将它们重播到目标应用程序。

结帐http://www.codestreet.com/marketdata/jms/jms_mq.php了解更多详情。