【发布时间】:2017-08-25 08:01:44
【问题描述】:
我有两个集群CLUSMES 和CLUSHUBS。每个集群有两个队列管理器。
集群 CLUSMES 具有 QMGRS:QMGR1A 和 QMGR1B
集群 CLUSHUBS 具有 QMGRS:QMGR3A 和 QMGR3B
有一个网关 QMGR:QMGR2,它形成了重叠,是每个 MQ 集群中的部分存储库。
请求消息通过QMGR2 从QMGR1A/B 发送到QMGR3A/B,QMGR2 作为集群负载平衡到QMGR3A/B(这工作正常),并且预计会回复发送 QMGR。
所有渠道连接都已到位且功能齐全。问题是如何从消息的来源返回消息。回复 QMGR 连接到 QMGR3A/B 并发出 put。我会得到一个 REMOTE_QMGR not found (MQRC 2087) 或一个 MQ Object not found (MQRC 2085),这取决于我的配置方式。消息的消息头正确包含ReplytoQueue 和ReplyToQMgr。我想让回复应用程序只发出一个 put 并将其传递到 CLUSMES 中的正确队列,但这被证明是非常困难的。我在 GateWay Qmgr 上玩过 Remote QMGR Alias 和 QAlias:QMGR2,但没有运气。必须有一个简单的技巧,并且有很多示例,但是我无法成功实现。一个明确的例子来说明我的返回路径应该是最有帮助的。请记住,ReplyToQMgr 位于MQMD 中,并且需要从中进行解决。我需要在QMGR2 级别进行解析,其中两个集群都是已知的。对具体的完整建议表示赞赏。
QMGR1A/B 上的 MQ 定义,其中需要回复:
DEFINE QLOCAL('SERVER.REPLYQ') CLUSTER('CLUSMES')
关于 QMGR2(消息希望的网关)
DEFINE NAMELIST(CLUSTEST) NAMES(CLUSMES,CLUSHUBS)
DEFINE QALIAS(SERVER.ALIAS.REPLYQ) TARGQ(SERVER.REPLYQ) CLUSTER(CLUSTEST) DEFBIND(NOTFIXED)
DEFINE QREMOTE(QMGR1A) RNAME(' ') RQMNAME(QMGR1A) XMITQ('') CLUSTER(CLUSHUBS)
DEFINE QREMOTE(QMGR1B) RNAME(' ') RQMNAME(QMGR1B) XMITQ('') CLUSTER(CLUSHUBS)
在 MQMGR3A/B QALIAS(SERVER.ALIAS.REPLYQ) 集群队列上。网关 QMGR 无法解析 baseQ:mqrc_unknown_alias_base_q 2082
这是尝试使用集群解决问题时的配置。
【问题讨论】:
-
上面很少有问题。 1. 引用
NAMELIST的方式是CLUSNL属性而不是CLUSTER属性。 2.我不相信你可以在一台服务器上拥有一个集群QALIAS,如果你打算从另一个集群队列中放入QALIAS,那么它可以解析为另一台服务器上的集群QLOCAL经理,但我必须对此进行测试。您能否指定请求应用程序放入ReplyToQueue和ReplyToQmgr的值,如果回复应用程序使用相同的值,请注意回复应用程序指定的队列名称和队列管理器名称? -
如果请求应用程序在
ReplyToQueue中指定SERVER.REPLYQ和在ReplyToQmgr中指定QMGR1A,则您不需要QALIAS(SERVER.ALIAS.REPLYQ)上的QALIAS(SERVER.ALIAS.REPLYQ)对象,只需@987654359 @ 目的。 (将1A替换为上面的2A以获取第二次请求 qmgr)。 -
如果回复应用程序没有使用
ReplyToQueue和ReplyToQmgr中指定的值,而是硬编码单个值,例如SERVER.ALIAS.REPLYQ作为它发送回复的队列,那么您将拥有无法使用 MQ 功能将它们路由回正确的请求队列管理器。
标签: ibm-mq