我想知道是否有 JMS 代理,它允许管理员在解决导致问题(例如数据库已关闭、空间不足... )。
WebSphere 提供了重新发送保存在死信队列中的消息的功能:1
Glassfish 2.1.1 使用 Sun Java System Message Queue 4.4 没有这样做的功能,我想是的。
其他 JMS 代理有哪些选项?或者如果您依赖消息,最好的方法是不使用 DMQ/DLQ 功能?
非常感谢
我想知道是否有 JMS 代理,它允许管理员在解决导致问题(例如数据库已关闭、空间不足... )。
WebSphere 提供了重新发送保存在死信队列中的消息的功能:1
Glassfish 2.1.1 使用 Sun Java System Message Queue 4.4 没有这样做的功能,我想是的。
其他 JMS 代理有哪些选项?或者如果您依赖消息,最好的方法是不使用 DMQ/DLQ 功能?
非常感谢
我可以回答 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)
注意:我为 CodeStreet 工作
您可以做的一件事是使用 CodeStreet“ReplayService for MQ”记录 DLQ 中的所有消息,然后通过 Web-GUI 查看/搜索它们。
找到要重新发送的消息后,可以将它们拖放到任意 MQ 主题或队列中,或者指定重播请求以将它们重播到目标应用程序。
结帐http://www.codestreet.com/marketdata/jms/jms_mq.php了解更多详情。