@JMSListener和@Consume注释之间的区别?



我正在尝试使用@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作为参数

您的代码不起作用,因为Destinationmailbox,而不是jms:mailbox。春天JmsTemplate不知道jms方案,它是骆驼特有的。因此,在弹簧侧使用jmsTemplate.convertAndSend("mailbox", message),在骆驼侧使用@Consume(uri="jms:mailbox")

最新更新