为什么这个Apache Camel拦截不起作用?

时间:2015-03-13 11:48:04

标签: java apache-camel intercept

我有一个主路线建设者:

public class MainRouteBuilder extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("activemq:a.out").to("activemq:b.in");

        from("activemq:b.in").bean(MainMessageConsumer.class);
    }
}

我有第二个“拦截”路线建设者:

public class InterceptRouteBuilder extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        interceptSendToEndpoint("activemq:a.out").to("activemq:c.in").skipSendToOriginalEndpoint();

        from("activemq:c.in").bean(InterceptMessageConsumer.class);
    }
}

两者都注册到CamelContext(首先注册MainRouteBuilder,然后注册InterceptRouteBuilder)。但是,当我通过以下方式向“activemq:a.out”发送消息时<:p>

public class App {

    @Produce(uri="activemq:a.out")
    private Producer producer;

    public void run() {
        producer.request("hello");
    }

}

消息仍然到达MainMessageConsumer而不是被截获。我做错了什么?

2 个答案:

答案 0 :(得分:3)

拦截器仅适用于同一路径构建器类中的所有路由。如果你想让它同时工作,那么创建一个基类,然后把拦截器放在那里,让其他路由扩展你的基类,并在configure方法中调用它的super(例如OO继承)

答案 1 :(得分:1)

似乎是如果使用@Produce注释创建生产者,那么它将不会被截获。如果我把:

@Bean
public ProducerTemplate producerTemplate() {
    return camelContext().createProducerTemplate();
}

在我的应用程序配置中,使用它然后它会被截获。不确定这是否是预期的行为?