将Spring Boot 1.5.9和JMS 2.0.1与Java 9.0一起使用.....
与IBM的MQ(版本9)讨论他们的MQQueueConnectionFactory
,它传递给扩展@JmsListener
类的com.ibm.jms.JMSMessage
和javax.jms.Message
。这意味着不使用MessageConverter
的正常类型反射。不确定在Spring JMS管道中我可以将JMSMessage转换为普通Message然后激活转换?在测试时,我想使用嵌入式活动mq,它生成Message
个对象而不是JMSMessage
。
因此,如果带注释的接收方法接受Message
而不是JMSMessage
,那将会很棒。
必须使用以下签名,否则Spring管道将失败,而IBM JMSMessage
没有定义的MessageConverter:
@JmsListener(destination = "${mq.queue}")
public void receive(
JMSMessage message,
@Header(JmsHeaders.MESSAGE_ID) String messageId
) ... {
....
}
我想要一个看起来像这样的签名:
@JmsListener(destination = "${mq.queue}")
public void receive(
Message message,
@Header(JmsHeaders.MESSAGE_ID) String messageId
) ... {
....
}
否则,在测试时(使用嵌入式jms队列管理器),接收方法没有一致的签名。必须在Spring JMS管道中存在一个位置(例如MessageListener),我可以在其中拦截JMSMessage
,拉出它的委托Message
并将其发送到JmsListener
。
误报。 Redid测试使用实时配置和接收签名,接受普通java.jmx.Message
和 M.D。指出它有效。同样,默认的简单消息转换器使用ClassUtils将底层的JMSTextMessage转换为字符串。