JMS與IBM MQ的集成的一個問題處理

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章