具有扩展消息类的Spring JMS消息转换器

时间:2018-01-09 11:01:38

标签: java spring-boot jms ibm-mq spring-jms

将Spring Boot 1.5.9和JMS 2.0.1与Java 9.0一起使用.....

与IBM的MQ(版本9)讨论他们的MQQueueConnectionFactory,它传递给扩展@JmsListener类的com.ibm.jms.JMSMessagejavax.jms.Message。这意味着不使用MessageConverter的正常类型反射。不确定在Spring JMS管道中我可以将JMSMessage转换为普通Message然后激活转换?在测试时,我想使用嵌入式活动mq,它生成Message个对象而不是JMSMessage

因此,如果带注释的接收方法接受Message而不是JMSMessage,那将会很棒。

更新1

必须使用以下签名,否则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

更新2

误报。 Redid测试使用实时配置和接收签名,接受普通java.jmx.Message M.D。指出它有效。同样,默认的简单消息转换器使用ClassUtils将底层的JMSTextMessage转换为字符串。

0 个答案:

没有答案