繁体   English   中英

使用Apache Camel和JAVA处理ActiveMQ消息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM