2

我对 MQ 中的 DEADQ 有疑问。我知道当无法将 msg 传递到目标队列时使用了 DEADQ,例如队列已满或像这样被禁止放置。但是,如果客户端应用程序通过SVRCONN通道连接到 QMGR并且目标队列现在已满,那么客户端应用程序发送的 msg 是否会转到 DEADQ 或者只是那个 put 操作会返回失败并说队列已满?

如果它作为后者工作,是否意味着 DEADQ 未用于客户端-服务器模式,例如通过 SVRCONN 通道?

谢谢

4

1 回答 1

4

DLQ 由 QMgr-to-QMgr 通道使用,因为此时消息已委托给 WMQ 以根据需要传递和/或持久化。无法在 API 调用中直接通知发送应用程序出现问题。QMgr 可以做的最好的事情是发回报告消息,如果应用程序已请求它,并且应用程序指定了回复队列。

当应用程序通过客户端通道连接时,QMgr 可以在 PUT API 调用期间告诉应用程序“嘿,目标队列已满”,并让应用程序决定适当的操作过程。通常,“正确的操作”不包括将消息放到 DLQ 上。事实上,将这种类型的消息路由到辅助队列是非常不寻常的。传统观点认为,应用程序发出警报比提供溢出队列更好。

一个例外是在使用 JMS 类时。这些会将有害消息(回退计数超过队列上的 BOTHRESH 值的消息)移动到回退队列。如果未指定回退队列或应用程序未对其授权或已满,则应用程序将尝试使用 DLQ。同样,允许应用程序直接向 DLQ 发送消息是非常不寻常的,并且不被认为是好的做法,但可以这样做。

于 2013-06-28T02:39:59.720 回答