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

时间:2009-05-18 03:27:47

标签: java-ee jms ibm-mq

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

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

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

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

如果MQ在指定次数的尝试后无法将消息传递到目标,则会将消息移至后退队列。

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

感谢任何帮助。

4 个答案:

答案 0 :(得分:13)

死信函队列总是在MQSeries中使用(我最后一次使用MQ)来存储到达队列管理器的消息,但队列不存在。

例如,如果邮件是队列管理器 X 的地址和队列 Y ,则它将通过管理员 X 的渠道到达。

如果发现接收者频道没有队列 Y ,它将被置于死信队列中。

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

如果它被退出太多次(可以配置阈值),它将被移动到退出队列。

答案 1 :(得分:4)

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

在我们的应用程序中它发生了。退出队列中存在一些权限问题,因此无法将消息写入BOQ,最终会出现在死信队列中。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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