【问题标题】:WebSphere MQ Backout Threshold and Backout Name are not workingWebSphere MQ 回退阈值和回退名称不起作用
【发布时间】:2012-11-04 09:04:51
【问题描述】:

我们在 WebSphere MQ v7.0.1.9 队列管理器中设置了BOTHRESH(5)BOQNAME(USER.ERR)

当 MDB 在 WebSphere 应用程序服务器 v7 中的容器管理的 TX 中回滚 TX 时,消息将被放置在 DLQ 中,而不是放置在原始队列中。

我查看了 TX 成功回滚的日志。

有人可以帮我吗?

【问题讨论】:

    标签: jms websphere ibm-mq


    【解决方案1】:

    ...消息被放置在 DLQ 中,而不是放置在原始队列中。

    设置BOQNAMEBOTHRESH 会导致QMgr 尝试将消息放入原始队列之外的其他位置。一旦超过BOTHRESH,QMgr 将首先尝试将消息放入BOQNAME 命名的队列中,如果无法放入BOQNAME,则再放入DLQ。只有当这两个都失败时,QMgr 才会将消息放回原始队列,或者如果消息是非持久的,则将其丢弃。

    退回到BOQNAME 中指定的队列或DLQ 失败的一些原因是:

    1. 目标队列不存在。
    2. 目标队列已满。
    3. 消息大小超过了目标队列的 MAXMSGL 属性。
    4. 用户无权将消息放入目标队列。
    5. 目标队列的类型错误(即 XMitQ 或模型队列)。
    6. 当放入 DLQ 时,QMgr 的 DEADQ 属性为空。
    7. BOTHRESH 已设置,但 BOQNAME 未设置。在这种情况下,DLQ 是唯一尝试过的队列。

    【讨论】:

    • 谢谢 Rob:) 消息永远不会放回原始队列中(即使是第一次回滚消息 r 推送到 DLQ 时)。第 4 点你的意思是我运行 WAS 实例的用户 ID 应该被授权将 msg 放回原始队列?
    • 设置 BOQNAME 和 BOQTHRESH 会导致 QMgr 尝试将消息放入原始队列以外的其他位置。(您的意思是,如果删除这些属性,则默认情况下回滚的 msg 将始终放置在原始队列中.我什至厌倦了,但它仍然在死信队列中着陆:()
    • 必须被授权的用户ID是MQ认为连接的那个。这可能是 WAS 实例 ID,也可能在通道的 MCAUSER 或通道安全出口中被覆盖。 DIS CHS(channel name) 在通道运行时会在 MCAUSER 字段中显示 WMQ 用于授权的 ID。如果MCAUSER 为空白,则通道以WMQ 管理员身份运行。如果BOQNAMEBOTHRESH 都为空并且消息正在登陆DLQ,则不是由于回退处理。 DLQ消息的原因码是什么?
    • 我正在使用 rfhutil 工具来浏览远程队列。当我浏览 SYSTEM.DEAD.LETTER.QUEUE 时,检查选项卡(DLQ)我可以看到原因代码 2362(MQRC_BACKOUT_THRESHOLD_REACHED),BACKCOUNT=0。根据本文档(ibm.com/developerworks/websphere/library/techarticles/…),默认行为应将消息放回原始队列,因为 BOTHRESH 未定义。非常感谢您的支持:)
    • 抱歉耽搁了。首先,Stack Overflow 不像论坛那样运作。为了让人们使用搜索找到问题和答案,离散的问题被放置在单独的帖子中。这一切都是由赞成票和问题接受驱动的。这里有一个关于退出行为的问题,一个关于网络交易可靠性的问题,一个关于事务性应用程序设计的问题。发帖、投票、再发帖、再投票等等。