[英]Processing ActiveMQ Messages with Apache Camel and JAVA
我在使用JAVA方法接收AMQ消息时遇到问题。 我在Spring DSL中使用骆驼路由进行路由,如下所示:
<camel:route>
<camel:from uri="activemq:foo.bar?maxConcurrentConsumers=1"/>
<camel:to uri="bean:fooService?method=handleBarEvent"/>
</camel:route>
我的JAVA代码如下所示:
package my.company.service
import org.apache.activemq.Message;
import org.apache.log4j.Logger;
public class FooService {
private static final Logger LOG = Logger.getLogger(FooService.class);
public void handleBarEvent(Message in) {
LOG.info(in);
}
public void handleOtherEvent(Message in) {
LOG.info(in);
}
}
现在,如果我将基于String
的消息放入AMQ,则会从Camel中收到以下错误消息:
org.apache.camel.component.bean.AmbiguousMethodCallException: Ambiguous method invocations possible: [
public void my.company.service.FooService.handleBarEvent(org.apache.activemq.Message),
public void my.company.service.FooService.handleOtherEvent(org.apache.activemq.Message)
]
为什么骆驼不调用已定义的handleBarEvent
?
方法必须接受哪种类型作为输入来获取整个AMQ消息?
我试图将Method更改为public void handleBarEvent(Object in)
但是然后Method仅获取String
-Body,而没有Message-Headers。
谢谢你的帮助!
您可以使用Exchange
handleBarEvent(Exchange exchange)
作为handleBarEvent(Exchange exchange)
参数,并且Camel将按预期方式传递完整的消息/标头...
exchange.getIn().getBody()
获取消息正文 exchange.getIn().getHeader([headerName])
以获取标头值,等等 同样,您可以像这样直接使用bean绑定将主体/标题绑定到参数...
public String hello(String name, @Header("country") String country) {
return "Hello " + name + " you are from " + country;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.