2012-03-13 28 views
2

我们正试图将我们企业中的DLQ全面整合到一个Q中(如果您愿意...)。我们在各种平台上混合使用QM - 大型机,各种Unix风格 - Linux,AIX,Solaris等,Windows,AS/400 .... 想法是在QM上配置DLQ(将DEADQ属性设置为质量管理)与作为群集Q的ENTERPRISE_DLQ的QM进行比较。企业中的所有QM都是群集的成员。但是,当我们测试它时,这种方法似乎不起作用。 我已经通过设置一个具有4个QM的简单集群来测试这个。在质量管理中的一个,定义的QREMOTE到一个不存在的QM和不存在的Q,但有效的XMITQ和配置QMS之间的requsite SDR CHL如下:队列管理器*上的DLQ是否必须是QM上的本地队列?

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触发启动QM3.QM1,当msg到达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 结果:Msg停留在QM1,QM3.QM1正在重试,QM1错误日志抱怨无法MQOPEN Q - ENTERPRISE_DLQ!

QL(QM1)CURDEPTH(1)

测试2: 对QM1设置deadq到qr.enterprise.dlq,写了味精在QM3 QR.NOT_EXIST 结果:消息原地踏步上QM1,QM3 QM1正在重试,QM1错误日志抱怨无法MQOPEN Q - qr.enterprise.dlq(全部大写)!!

QL(QM1)CURDEPTH(2)

测试3: 上QM1设置deadq到qa.enterise_dlq,写了味精在QM3 QR.NOT_EXIST 结果:消息原地踏步上QM1,QM3.QM1正在重试,QM1错误日志抱怨不能MQOPEN Q - qa.enterise_dlq(全部大写)!

QL(QM1)CURDEPTH(3)

测试4: 上QM1设置deadq到local_dlq,写了味精在QM3 QR.NOT_EXIST 结果:消息原地踏步上QM1,QM3.QM1是RUNNING ,QM3上的所有消息ql(QM1)将其转换为QM3上的local_dlq。

QL(QM1)CURDEPTH(0)

现在的问题是:看起来在QM 像DLQ必须是本地队列。这是一个正确的结论吗?如果没有,我如何才能让所有DLQ msg都转到上面的单个Q-Enterprise_DLQ?

一个明显的解决方案是在QM3上的local_dlq上定义触发器(并在其他QM上执行相同的操作),它将读取消息并将其写入群集Q - ENTERPRISE_DLQ。但是这涉及到额外的移动部件 - 触发,触发每个QM上的监视器。能够将Q/QRemote/QAlias配置为QM上的DLQ是最理想的。思考/想法?

感谢 -Ravi

回答

2

每文档here

死信队列有不同之处在于没有特殊要求:

  • 它必须是一个本地队列
  • 其MAXMSGL(最大消息长度)属性必须使队列能够容纳队列管理器的最大消息已经
    来处理加死信报头(MQDLH)

的DLQ提供了一种用于QMGR来处理一个信道无法传递消息的装置的尺寸。如果DLQ不是本地的,那么通道的错误处理本身将依赖于通道。这会带来一些建筑设计缺陷。

规定的方式来做你需要的是触发一个工作转发消息到远程队列。通过这种方式,只要消息遇到DLQ,触发的作业就会启动并转发消息。如果您不想编写这样的程序,您可以轻松使用一些shell或Perl代码以及来自SupportPac MA01的Q程序。建议用于从QMgr发送这些消息的信道将被设置为不使用DLQ。理想情况下,这些将存在于专用群集中,以便DLQ流量不与应用流量混合。

另外,请注意,如果转换错误阻止它们发送,DLQ的其中一个功能是将消息移出XMitQ。将它们转发到中央位置可能会将它们重新放回集群XMitQ。同样,如果目的地已满,这些消息也将位于发送qMgr的群集XMitQ上。如果它们的数量足够多,则完整集群XMitQ将阻止所有集群通道正常工作。在这种情况下,您需要某种工具来让您有选择地删除或移出群集XMitQ中的消息,这会有点具有挑战性。

考虑到这一切,这项要求似乎会面临比解决问题更多的挑战。建议:通道的错误处理最好在不进一步使用通道的情况下处理 - 即在本地处理。

+0

感谢罗布 - 为您的及时回应。 – 2012-03-15 19:53:44

相关问题