簡體   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