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);