【发布时间】:2012-03-14 11:30:46
【问题描述】:
我们正在尝试将我们企业中的所有 DLQ 合并为一个 Q(如果您愿意的话,可以是一个 Enterprise_DLQ……)。我们在各种平台上混合了 QM - 大型机、各种 Unix 风格 - Linux、AIX、Solaris 等、Windows、AS/400.... 想法是将 QM 上的 DLQ(在 QM 上设置 DEADQ 属性)配置为集群 Q 的 ENTERPRISE_DLQ。企业中的所有 QM 都是集群的成员。然而,当我们测试它时,这种方法似乎不起作用。 我通过设置一个带有 4 个 QM 的简单集群对此进行了测试。在其中一个 QM 上,为不存在的 QM 和不存在的 Q,但有效的 xmitq 定义了一个 QRemote,并在 QM 之间配置 requsite SDR chl,如下所示:
QM_FR - Full_Repos QM1、QM2、QM3 - 集群成员
QM_FR 托管 ENTERPRISE_DLQ,它被通告给集群
在 QM3 上设置以下内容: QM3.QM1 - sdr 到 QM1, ql(QM1) 使用 xmitq, qr(qr.not_exist) rqmname(not_exist) rname(not_exist) xmitq(qm1), 设置 QM1 以在消息到达 QM1 时触发启动 QM3.QM1
在 QM1 上: QM3.QM1 - rcvr chl, ql(local_dlq), ql(qa.enterise_dlq), qr(qr.enterprise.dlq)
测试 1: 将 QM1 上的 deadq 设置为 ENTERPRISE_DLQ,将 msg 写入 QM3 上的 QR.NOT_EXIST 结果:消息保持在 QM1 上,QM3.QM1 正在重试,QM1 错误日志抱怨无法 MQOPEN Q - ENTERPRISE_DLQ!!
ql(qm1) 曲线深度(1)
测试 2: 将 QM1 上的 deadq 设置为 qr.enterprise.dlq,将 msg 写入 QM3 上的 QR.NOT_EXIST 结果:消息停留在 QM1 上,QM3.QM1 正在重试,QM1 错误日志抱怨无法 MQOPEN Q - qr.enterprise.dlq(全部大写)!!
ql(qm1) curdepth(2)
测试 3: 将 QM1 上的 deadq 设置为 qa.enterise_dlq,将 msg 写入 QM3 上的 QR.NOT_EXIST 结果:消息保持在 QM1 上,QM3.QM1 正在重试,QM1 错误日志抱怨无法 MQOPEN Q - qa.enterise_dlq(全部大写)!!
ql(qm1) 曲线深度(3)
测试 4: 将 QM1 上的 deadq 设置为 local_dlq,将 msg 写入 QM3 上的 QR.NOT_EXIST 结果:消息保持在 QM1 上,QM3.QM1 正在运行,QM3 ql(QM1) 上的所有消息都进入 QM3 上的 local_dlq。
ql(qm1) curdepth(0)
现在的问题是:看起来 QM 上的 DLQ 必须是本地队列。这是一个正确的结论吗?如果没有,我怎样才能让所有的 DLQ 消息都转到上面的单个 Q - Enterprise_DLQ?
一个明显的解决方案是在 QM3 上的 local_dlq 上定义一个触发器(并在其他 QM 上执行相同操作),它将读取 msg 并将其写入 Cluster Q - ENTERPRISE_DLQ。但这涉及到额外的活动部件 - 每个 QM 上的触发器、触发器监视器。最希望能够将集群 Q/QRemote/QAlias 配置为 QM 上的 DLQ。想法/想法???
谢谢 -拉维
【问题讨论】:
标签: ibm-mq