首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置队列管理器别名的WebSphereMQ消息传输头

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

Stack Overflow用户
提问于 2016-12-08 20:20:19
回答 1查看 383关注 0票数 1

我试图在远程队列上放置一条消息,而远程队列不是在队列管理器(队列管理器别名)上本地定义的。我被告知要将远程队列管理器名称放在消息传输头中,以便将其路由到适当的传输队列。

我能够用以下方法连接到内部队列管理器:

代码语言:javascript
复制
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,但不确定如何将传输头设置为目标队列管理器名称。

代码语言:javascript
复制
message = new MQMessage();
message.Format = MQC.MQFMT_STRING;
message.WriteString(messageString);

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

我试过使用空白的qName并得到一个MQRC_REMOTE_Q_NAME_ERROR

UPDATE:原来他们配置的队列管理器别名不正确。下面的答案帮助我向他们指出了这一点。正如所接受的答案所述,MQ为您处理消息传输头。一旦配置正确,就等于将消息放在本地定义的远程队列上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-08 20:38:01

要回答标题中的问题,您不需要设置XMit头,因为MQ将为您做这件事。

针对问题的主体,这都取决于MQ如何解析队列名。在出现的情况下,当打开目标队列时,可以告诉MQ在哪里发送消息。然后MQ遵循一个解析过程来确定将消息放在哪里。

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

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41048135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档