【发布时间】:2017-10-16 13:57:47
【问题描述】:
如何在 IBM JMS MQ 的 MQM 标头中设置 userID,默认为 'mqm' 我需要在发送消息时将其设置为不同的 userID。我正在使用 com.ibm.mqjms jar,应用程序部署在 Tomcat 上。
【问题讨论】:
如何在 IBM JMS MQ 的 MQM 标头中设置 userID,默认为 'mqm' 我需要在发送消息时将其设置为不同的 userID。我正在使用 com.ibm.mqjms jar,应用程序部署在 Tomcat 上。
【问题讨论】:
在您的应用程序中,您需要访问 JMS 规范之外的一些 IBM MQ 功能。
IBM MQ v8 知识中心在页面“Reading and writing the message descriptor from an IBM MQ classes for JMS application”中记录了如何使用 IBM MQ Classes for JMS 设置 MQMD 属性
您必须将目标对象属性 WMQ_MQMD_WRITE_ENABLED 设置为 true,MQMD 属性设置才能生效。然后,您可以使用消息的属性设置方法(例如 setStringProperty)将值分配给 MQMD 字段。除 StrucId 和 Version 外,所有 MQMD 字段都被公开; BackoutCount 可以读取但不能写入。
此示例导致将消息放入队列或主题,并将 MQMD.UserIdentifier 设置为“JoeBloggs”。 // 创建 ConnectionFactory、连接、会话、生产者、消息 // ...
// Create a destination // ... // Enable MQMD write dest.setBooleanProperty(WMQConstants.WMQ_MQMD_WRITE_ENABLED, true); // Optionally, set a message context if applicable for this MD field dest.setIntProperty(WMQConstants.WMQ_MQMD_MESSAGE_CONTEXT, WMQConstants.WMQ_MDCTX_SET_IDENTITY_CONTEXT); // On the message, set property to provide custom UserId msg.setStringProperty("JMS_IBM_MQMD_UserIdentifier", "JoeBloggs"); // Send the message // ...
为了使用WMQ_MDCTX_SET_IDENTITY_CONTEXT,您需要在qmgr 对象和queue 上向连接到IBM MQ 队列管理器的用户授予OAM 权限+setid除了您将授予的任何正常权限之外,还应为 PUT(例如:qmgr 上的 +connect +dsp 或 queue 上的 +put)。
【讨论】: