Ibm mq 与IBM MQ重叠的MQ群集和回复消息传递

Ibm mq 与IBM MQ重叠的MQ群集和回复消息传递,ibm-mq,Ibm Mq,我有两个集群clusemes和CLUSHUBS。每个集群有两个队列管理器 集群clusemes具有QMGR:QMGR1A和QMGR1B 集群CLUSHUBS具有QMGR:QMGR3A和QMGR3B 有一个网关QMGR:QMGR2,它形成重叠,是每个MQ集群中的部分存储库 请求消息通过QMGR2从QMGR1A/B发送到QMGR3A/B,作为集群负载平衡发送到QMGR3A/B(这很好),并期望回复到发送的QMGR 所有通道连接均已到位且功能齐全。问题是如何从消息的来源返回消息。应答QMGR连接到QM

我有两个集群
clusemes
CLUSHUBS
。每个集群有两个队列管理器

集群
clusemes
具有QMGR:
QMGR1A
QMGR1B

集群
CLUSHUBS
具有QMGR:
QMGR3A
QMGR3B

有一个网关QMGR:
QMGR2
,它形成重叠,是每个MQ集群中的部分存储库

请求消息通过
QMGR2
QMGR1A/B
发送到
QMGR3A/B
,作为集群负载平衡发送到
QMGR3A/B
(这很好),并期望回复到发送的QMGR

所有通道连接均已到位且功能齐全。问题是如何从消息的来源返回消息。应答QMGR连接到QMGR3A/B并发出put。根据配置方式,我将获取未找到的远程\u QMGR(
MQRC 2087
)或未找到的MQ对象(
MQRC 2085
)。消息的消息头正确地包含了
ReplytoQueue
ReplyToQMgr
。我想让回复应用程序发出put,并将其发送到
clusemes
中的适当队列,但事实证明这非常困难。我在网关QMGR:
QMGR2
上玩过远程QMGR别名和QAlias,但运气不好。这必须有一个简单的技巧,并且有很多例子,但是我没有能够成功地实现一个。一个关于我的返回路径应该是什么的清晰示例将是最有帮助的。请记住,
ReplyToQMgr
位于
MQMD
中,需要从中进行解析。我需要在
QMGR2
级别进行解析,这两个集群都是已知的。欢迎提出具体和全面的建议

QMGR1A/B上的MQ定义,其中需要回复:

DEFINE QLOCAL('SERVER.REPLYQ') CLUSTER('CLUSMES') 
在QMGR2(消息传递网关)上

在MQMGR3A/B QALIAS(SERVER.ALIAS.REPLYQ)集群队列上。网关QMGR无法解析baseQ:mqrc_unknown_别名_base_q 2082


这是尝试使用集群解析时的配置

当应用程序发送请求消息时,它将指定
QMGR1A
QMGR1B
ReplytoQueue
中的
ReplyToQMgr
中的

在网关队列管理器
QMGR2
上,您将定义以下对象:

DEFINE QREMOTE(QMGR1A) RNAME('') RQMNAME(QMGR1A) XMITQ('') CLUSTER(CLUSHUBS)
DEFINE QREMOTE(QMGR1B) RNAME('') RQMNAME(QMGR1B) XMITQ('') CLUSTER(CLUSHUBS)
这将允许集群中的任何队列管理器
CLUSHUBS
通过网关队列管理器
QMGR2
将回复消息路由回
QMGR1A
QMGR1B



如果您想限制
CLUSHUBS
集群中队列管理器可以设置的
QMGR1A
QMGR1B
上的队列,您需要采取不同的方法。让我知道这是否是您所需要的,我将用一些建议更新我的答案。

要使其起作用,应答应用程序是否需要在MQOD消息头中指定ReplyToQMGR?这意味着如果可能,应避免应用程序更改。是否有其他方法?如果您是指请求的应用程序,请将其保留为空,则将填写您的应用程序连接到的qmgr。放置回复消息的服务器/应用程序将其放置到其连接到的默认qmgr。您建议的解决方案意味着,应用程序需要向REPLYToQmgr发出PUT,这将在QMGR2上定义QALIAS。实际情况是,当应用程序向连接的QMGR发出put时,如何跨集群路由该消息。我将QREMOTE QMGR别名定义为集群到clusemes的QMGR2,但它只提供循环方式,而忽略了真正的目的地。更改应用程序目前不是一个选项。@SteveO应答的应用程序可以连接到默认的QMGR(
QMGR3A
QMGR3B
)。当它放置消息时,它将基本队列管理器名称设置为ReplyToQMgr中的内容(
QMGR1A
QMGR1B
),在这种情况下,将队列设置为ReplyToQueue中的内容。默认队列管理器将处理通过
CLUSHUBS
集群将其发送到QMGR2,然后将其路由到正确的目标队列管理器。@SteveO注意,我在
QMGR2
中提到的定义的两个对象是填充RQMNAME的QREMOTE QMGR别名。因为填写了RQMNAME,所以它不会对消息进行循环。如果您将RQMNAME留空,则仅当回复队列是集群的并且正如我所提到的,它不需要集群时,消息才会循环。1.引用
名称列表的方法是
CLUSNL
属性,而不是
CLUSTER
属性。2.如果您计划从另一个集群队列管理器将
QALIAS
放到另一台服务器上,我不相信您可以在一台服务器上有一个集群
QALIAS
来解析到另一台服务器上的集群
QLOCAL
,但我必须对此进行测试。您能否指定请求应用程序将哪些值放入
ReplyToQueue
ReplyToQmgr
中,以及应答应用程序是否使用这些值,如果注意应答应用程序指定的队列名称和队列管理器名称是什么?如果请求应用程序在
ReplyToQueue
中指定
SERVER.REPLYQ
,在
ReplyToQmgr
中指定
qmlias(SERVER.ALIAS.REPLYQ)
对象,则只需
QREMOTE即可(QMGR1A)
object。(对于第二次请求qmgr,将上面的
1A
替换为
2A
)。如果应答应用程序未使用
ReplyToQueue
中指定的值
DEFINE QREMOTE(QMGR1A) RNAME('') RQMNAME(QMGR1A) XMITQ('') CLUSTER(CLUSHUBS)
DEFINE QREMOTE(QMGR1B) RNAME('') RQMNAME(QMGR1B) XMITQ('') CLUSTER(CLUSHUBS)