簡體   English   中英

如何通過 JMS API 設置 MQMD ApplicationID 字段?

[英]How to set MQMD ApplicationID field via JMS API?

我正在使用 JMS API 將消息發送到 Websphere MQ 服務器。 提取我創建的消息的應用程序希望我將 MQMD 結構中的 ApplicationID 字段設置為常量值。 我在 JMS API 中找不到訪問 MQMD 結構的方法

問題:有沒有辦法做到這一點? 如果是,那么如何? 如果不是,那么我唯一的選擇是使用 MQ java API 而不是 JMS API?

從 v7.0 開始,您可以將所有 MQMD 字段讀取為 JMS 消息屬性,並且可以以相同的方式設置其中的許多字段。

請參閱: http : //publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/jm41030_.htm

但是,客戶端和 WMQ 服務器都必須是 v7.0 或更高版本才能使用此功能。

MQMD 字段可以從接收到的消息中讀取。 通過調用 setMQMDReadEnabled(true) 方法在目標上設置 MQMDReadEnabled 屬性。

然后您可以使用 getStringProperty 方法讀取 applicationIdentityData。

從 MQ 文檔:

在 MQMD 包括等效於 JMS 字段的字段的情況下,JMS 字段映射到 MQMD 字段。 其他 MQMD 字段作為 JMS 屬性公開,因為 JMS 應用程序在與非 JMS 應用程序通信時可能需要獲取或設置這些字段。

您正在尋找的屬性可能是“ JMSXAppID ”。

如果這不起作用,請查看文檔。 有很多奇怪的東西,比如“如果應用程序使用與代理的實時連接,則本節不適用。” (所以你不想要“與經紀人的實時連接”......無論這意味着什么)。

此外,“ 管理員通過將目標的 TARGCLIENT 屬性設置為 MQ 來指示 JMS 應用程序正在與此類應用程序通信。

如果這沒有意義,您必須創建測試用例來幫助您弄清楚 MQ 在幕后做了什么。 創建一個 JMS 消息,將所有屬性設置為一些奇怪的值,然后將其發送到一個非活動的 MQ 隊列,您可以在其中檢查它。 通過這種方式,您可以找出哪些字段映射到何處。

成功后,您可以嘗試其他方式。 如果您的 JMS 實現不允許您以地圖或其他方式獲取消息的所有屬性,請使用 Java 調試器查看內存中的數據。 Field.setAccessible(true)是你的朋友。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM