![](/img/trans.png)
[英]How to set JMS_IBM_MQMD_ACCOUNTINGTOKEN in JMSMessage
[英]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.