【问题标题】:How does the DEADQ work for SVRCONN channel in MQ?DEADQ 对 MQ 中的 SVRCONN 通道如何工作?
【发布时间】:2013-06-28 02:24:47
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: ibm-mq mq


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复,罗布。因此对于客户端-QMgr 模式,一旦无法传递目标队列,MCA 将不会将 msg 重新路由到 DEADQ。但是 QMgr-to-QMgr MCA 可以做到,对吧?
    • 是的。 QMgr-to-QMgr MCA 对此有一些逻辑。除了一些故障转移逻辑,客户端 MCA 大多只是应用程序进行 API 调用的代理,不会尝试注入自己的行为。甚至我提到的毒消息处理也不是客户端 MCA。这实际上是在 Java/JMS 类中。
    • 非常感谢您的回复,罗伯
    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多