没有看到我明确设置的消息属性(Spring / JMS / MQ)

时间:2011-10-04 00:41:59

标签: jms websphere ibm-mq jmstemplate spring-jms

两个独立的进程通过MQ通过JMS进行通信。

编写器设置字符串属性:

new MessageAction() {
    public void actOn(Message message) throws JMSException {
        logger.debug("Setting message property (GmmThreadId, CASHFLOW-1234)");
        message.setStringProperty("GmmThreadId", "CASHFLOW-1234");
    }
});

执行此MessageAction,如日志中所示:

Setting message property (GmmThreadId, CASHFLOW-1234)


阅读器使用消息选择器来获取此消息。 (使用Spring的JmsTemplate v1 - 我知道的旧版本,但它已经融入我们供应商的框架中,我们不得不使用它。

template.receiveSelected(queue, "GmmThreadId = 'CASHFLOW-1234' or GmmThreadId IS NULL");

队列中唯一的消息是日志显示编写器设置消息属性的消息。在阅读器的日志中,我枚举属性并尝试记录GmmThreadId的值。它还显示属性GmmThreadId不存在。

message property JMS_IBM_PutDate = 20111003
message property JMSXAppID = WebSphere MQ Client for Java
message property JMS_IBM_Format = MQSTR
message property JMS_IBM_PutApplType = 28
message property JMS_IBM_MsgType = 8
message property JMSXUserID = MUSR_MQADMIN
message property JMS_IBM_PutTime = 23551798
message property JMSXDeliveryCount = 2
message had GmmThreadId property of null

请注意,如果我的消息选择器仅为"GmmThreadId = 'CASHFLOW-1234'",则不会出现任何内容。

使用WebSphere MQ资源管理器查看消息,我找不到任何地方查看应用程序集消息属性。消息类型是MQSTR,如果这有任何区别。

读者和编写器应用程序都在WebSphere v6中运行。

我哪里错了?

1 个答案:

答案 0 :(得分:3)

this thread所示,如果目标类型为“MQ”,则将禁止消息属性。对我来说,这是在WebSphere App Server控制台中配置的。我将队列类型更改为“JMS”,并且消息属性保持不变。