繁体   English   中英

如何为队列管理器别名设置WebSphereMQ消息传输标头

[英]How To Set WebSphereMQ Message Transmission Header for Queue Manager Alias

我正在尝试将消息放在远程队列上,该队列未在队列管理器(队列管理器别名)上本地定义。 我被告知要将远程队列管理器名称放在消息传输头中,以便将其路由到相应的传输队列。

我可以使用以下内容连接到内部队列管理器:

Hashtable properties = new Hashtable();
properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
properties.Add(MQC.HOST_NAME_PROPERTY, hostName);
properties.Add(MQC.PORT_PROPERTY, port);
properties.Add(MQC.CHANNEL_PROPERTY, channelName);    

MQQueueManager queueManager = new MQQueueManager(queueManagerName, properties);

我创建消息并尝试执行Put但我不确定在何处/如何将传输头设置为目标队列管理器名称。

message = new MQMessage();
message.Format = MQC.MQFMT_STRING;
message.WriteString(messageString);

queueManager.Put( ???qName???, ???qmName???, message);

我尝试使用空白qName并获取[MQRC_REMOTE_Q_NAME_ERROR]

更新 :原来他们错误地配置了队列管理器别名。 下面的答案帮助我指出了它们。 正如接受的答案所述,MQ为您处理消息传输标头。 正确配置后,它就像在本地定义的远程队列上放置消息一样。

要回答标题中的问题,您不需要设置XMit标头,因为MQ会为您执行此操作。

回答问题的主体,全部是MQ如何解析队列名称。 在您出现的情况下,您将告诉MQ在打开目标队列时将消息发送到何处。 然后,MQ遵循解决过程来确定将消息放在何处。

如果指定QNAME但没有指定RQMNAME或者当RQMNAME是本地队列管理器时,则MQ会查找本地队列。 当您指定QNAME并且RQMNAME 不是本地队列管理器时,MQ会查找指向QMgr的XMitQ。 如果它找到一个,它会将您的消息放在那里并包含所需的XMitQ标头。

MQ通过查看是否与目标QMgr具有相同的名称来查找正确的XMitQ。 如果不是它,它会查找具有该名称和空白RNAME QREMOTE定义,并使用XMITQNAME值。 (因为那种QREMOTE指向整个QMgr,它不能指定RNAME 。这称为QMgr Alias,因为它定义了QMgr和指向它的XMitQ之间的关系。)

有关详细说明,请参阅信息中心中的队列名称解析

请注意,放置消息的ID将需要访问传输队列。 授予访问权限允许应用程序将消息发送到远程节点上的任何队列,包括SYSTEM.*队列。 接收QMgr负责将频道的MCAUSER设置为无法访问管理队列的帐户ID(如果这是一个问题)。 在本地队列管理器上,可以授权指向远程队列的QREMOTE定义而不是XMit队列,以防止这种广泛访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM