IBM MQ是一款非常成熟的消息隊列產品,在人民銀行的核心繫統中使用,國外的很多客戶也使用。我本次遇到的就是一個國內客戶與國外MQ集成時遇到的問題。
在IBM的官方文檔裏面對連接方法和原理有非常詳細的介紹。
https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q032350_.htm
主要的關鍵設置就是WMQ_MQMD_MESSAGE_CONTEXT這個參數和下面三個JMS參數是關聯的,
WMQ_MDCTX_SET_IDENTITY_CONTEXT or WMQ_MDCTX_SET_ALL_CONTEXT:
- JMS_IBM_MQMD_UserIdentifier
- JMS_IBM_MQMD_AccountingToken
- JMS_IBM_MQMD_ApplIdentityData
如果要想設置另外這五個參數就要設置WMQ_MDCTX_SET_ALL_CONTEXT。
- JMS_IBM_MQMD_PutApplType
- JMS_IBM_MQMD_PutApplName
- JMS_IBM_MQMD_PutDate
- JMS_IBM_MQMD_PutTime
- JMS_IBM_MQMD_ApplOriginData
另外一個關鍵參數就是WMQ_MQMD_WRITE_ENABLED要設置成true
相關代碼配置如下:
1 可以在指定的隊列中配置相關參數配置
2 使用具體的代碼實現
配置完相關屬性後就可以在消息中設置消息頭屬性
相關代碼例子如下:
1.連接字符串
String qNameString = "queue:///LocalQ? targetClient=1&mdMessageContext=2&mdWriteEnabled=true";
2.
((MQQueue) destination).setTargetClient(WMQConstants.WMQ_CLIENT_NONJMS_MQ);
((MQQueue) destination).setBooleanProperty(WMQConstants.WMQ_MQMD_WRITE_ENABLED ,true);
((MQQueue) destination).setIntProperty(WMQConstants.WMQ_MQMD_MESSAGE_CONTEXT ,WMQConstants.WMQ_MDCTX_SET_ALL_CONTEXT);