[英]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.