我正在尝试使用@Consume注释的bean使用通过Spring JmsTemplate发送的JMS消息。使用者在使用 JmsTemplate 发送时未收到消息。
然而,当使用Camel的生产者模板发送时,会收到消息。
@org.springframework.jms.annotation.JmsListener 和 @org.apache.camel.Consumption 有什么区别?
生产者逻辑
jmsTemplate.convertAndSend("jms:mailbox", message);
消费者逻辑
@Consume(uri="jms:mailbox")
public void onRequest(String name) {
System.out.println("Received message > "+name);
}
Apache Camel@Consume
注解可以从任何支持消费的端点使用。此注释将uri
作为参数。URI 由方案、路径和可选参数组成。在JMS组件的情况下,方案是jms
的,路径是Destination
的(在你的例子中是mailbox
(,参数是定制Consumer
行为的附加选项。
Spring@JmsListener
可以从 JMS 使用,并将Destination
作为参数。
您的代码不起作用,因为Destination
是mailbox
,而不是jms:mailbox
。春天JmsTemplate
不知道jms
方案,它是骆驼特有的。因此,在弹簧侧使用jmsTemplate.convertAndSend("mailbox", message)
,在骆驼侧使用@Consume(uri="jms:mailbox")
。