Ibm mq 队列管理器*上的DLQ必须*是QM上的本地队列吗?
我们正试图将我们企业中的所有DLQ整合为一个单独的Q(企业级DLQ,如果您愿意…)。我们在各种平台上混合使用QMs—大型机、各种Unix风格—Linux、AIX、Solaris等、Windows、AS/400。。。。 其想法是将QM上的DLQ(在QM上设置DEADQ属性)配置为ENTERPRISE_DLQ的DLQ,后者是集群Q。企业中的所有QM都是集群的成员。然而,当我们测试它时,这种方法似乎不起作用。 我通过设置一个具有4个QMs的简单集群来测试这一点。在其中一个QM上,将QRemote定义为不存在的QM和不存在的Q,但定义为有效的xmitq,并在QMs之间配置重新使用SDR chl,如下所示: QM\U FR-全面回购 QM1、QM2、QM3-群集的成员 QM_FR承载向集群播发的ENTERPRISE_DLQ 在QM3上设置以下内容: QM3.QM1-sdr到QM1,ql(QM1)使用xmitq,qr(qr.not_存在)rqmname(not_存在)rname(not_存在)xmitq(QM1),设置QM1以在消息到达QM1时触发启动QM3.QM1 关于QM1: QM3.QM1-rcvr chl、ql(本地)、ql(qa.enterise)、qr(qr.enterprise.dlq) 测试1: 将QM1上的deadq设置为ENTERPRISE_DLQ,将消息写入QR。QM3上不存在 结果:消息保持在QM1上,QM3.QM1正在重试,QM1错误日志抱怨无法MQOPEN Q-ENTERPRISE_DLQ ql(qm1)curdepth(1) 测试2: 将QM1上的deadq设置为qr.enterprise.dlq,将消息写入qr.NOT_QM3上存在 结果:消息保持在QM1上,QM3.QM1正在重试,QM1错误日志抱怨无法MQOPEN Q-qr.enterprise.dlq(所有上限) ql(qm1)curdepth(2) 测试3: 将QM1上的deadq设置为qa.enterise_dlq,将消息写入QR.NOT_存在于QM3上 结果:消息保持在QM1上,QM3.QM1正在重试,QM1错误日志抱怨无法MQOPEN Q-qa.enterise_dlq(所有caps) ql(qm1)curdepth(3) 测试4: 将QM1上的deadq设置为local_dlq,将消息写入QR。QM3上不存在 结果:Msg保持在QM1上,QM3.QM1正在运行,QM3 ql(QM1)上的所有Msg都在QM3上的本地_dlq上 ql(qm1)curdepth(0) 现在的问题是:看起来QM上的DLQ必须是本地队列。这是正确的结论吗?如果没有,我如何将所有DLQ消息发送到上面的单个Q-Enterprise_DLQ 一个显而易见的解决方案是在QM3上的本地_dlq上定义一个触发器(在其他QMs上也这样做),它将读取消息并将其写入集群Q-ENTERPRISE_dlq。但这涉及到额外的运动部件-触发器,每个QM上的触发器监视器。最理想的是能够将集群Q/QRemote/QAlias配置为QM上的DLQ。想法/想法 谢谢 -Ravi根据文件: 死信队列没有特殊要求,除了:Ibm mq 队列管理器*上的DLQ必须*是QM上的本地队列吗?,ibm-mq,Ibm Mq,我们正试图将我们企业中的所有DLQ整合为一个单独的Q(企业级DLQ,如果您愿意…)。我们在各种平台上混合使用QMs—大型机、各种Unix风格—Linux、AIX、Solaris等、Windows、AS/400。。。。 其想法是将QM上的DLQ(在QM上设置DEADQ属性)配置为ENTERPRISE_DLQ的DLQ,后者是集群Q。企业中的所有QM都是集群的成员。然而,当我们测试它时,这种方法似乎不起作用。 我通过设置一个具有4个QMs的简单集群来测试这一点。在其中一个QM上,将QRemote定义为
- 它必须是本地队列
- 其MAXMSGL(最大消息长度)属性必须使队列能够容纳队列管理器拥有的最大消息
处理加上死信头的大小(MQDLH)
考虑到所有这些,这个需求似乎带来了比它解决的更多的挑战。建议:频道的错误处理最好在不进一步使用频道的情况下进行-即在本地进行。感谢Rob-感谢您的及时响应。