死信队列和退出队列有啥区别?

Posted

技术标签:

【中文标题】死信队列和退出队列有啥区别?【英文标题】:What is the difference between a Dead Letter Queue and a back out Queue?死信队列和退出队列有什么区别? 【发布时间】:2010-10-26 22:38:27 【问题描述】:

死信队列和退出队列有什么区别?

在 WebSphere MQ 术语和应用程序服务器方面。

所有 J2EE/JEE 应用程序服务器都有一个 MQ 提供程序,它们是否也有一个死信队列的构造,还是特定于 WebSphere MQ?

我对退出队列的理解如下:

如果经过指定次数的尝试后 MQ 无法将消息传递到目标,它会将消息移动到退出队列。

我对死信队列没有清楚的了解。

感谢任何帮助。

【问题讨论】:

community.ibm.com/community/user/imwuc/browse/blogs/… 【参考方案1】:

在 MQSeries 中(我上次使用 MQ)一直使用死信队列来存储到达队列管理器但队列不存在的消息。

例如,如果消息的地址是队列管理器 X 和队列 Y,它将通过管理器 X 的通道到达。

如果接收通道发现没有队列Y,则将其放入死信队列。

另一方面,回退队列更像是一个应用程序级别的东西(至少就 MQ 而言)。当 MQ 客户端由于某种原因无法处理消息时,它可以将其退回以供以后处理(返回到它的原始队列)。

如果回退次数过多(阈值可配置),则会被移至回退队列。

【讨论】:

这里有更多信息:ibm.com/developerworks/websphere/library/techarticles/… @paxdiablo,这个回退队列是由 MQ 管理器管理还是客户端必须连接到这个队列? 虽然回退队列由队列管理器管理,但将消息路由到回退队列是由 MQ 的 JMS 和 XMS 客户端完成的。【参考方案2】:

感谢您的回答。我还发现,如果应用程序由于某种原因无法将消息移动到 Back Out Queue (BOQ),则会尝试将队列移动到死信队列 (DLQ)。

在我们的应用程序中它发生了。 Back Out Queue 出现权限问题,导致消息无法写入 BOQ,最终进入死信队列。

【讨论】:

【参考方案3】:

死信队列的行为与回退相同。我将死信队列视为无法在错误或回退队列中恢复的消息的火葬场,并且需要收集一些最后的非业务特定数据。一旦信息被捕获,消息就会被永久删除。回退适用于分析可能需要恢复以完全重新处理或发送回应用程序区域供他们决定的数据的消息。

【讨论】:

【参考方案4】:

死信队列也是本地队列。如果我们尝试将消息从一个队列放入另一个队列,但消息没有发送到正确的目的地,此时消息将进入死信队列。

【讨论】:

以上是关于死信队列和退出队列有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ 死信队列 定时队列 延时队列

利用rabbitMq的死信队列实现延时消息

RabbitMQ 死信队列DLX

RabbitMQ项目使用之死信队列

RabbitMQ项目使用之死信队列

RabbitMQ的死信队列和延时队列