我有一个主路线建设者:
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而不是被截获。我做错了什么?
答案 0 :(得分:3)
拦截器仅适用于同一路径构建器类中的所有路由。如果你想让它同时工作,那么创建一个基类,然后把拦截器放在那里,让其他路由扩展你的基类,并在configure方法中调用它的super(例如OO继承)
答案 1 :(得分:1)
似乎是如果使用@Produce注释创建生产者,那么它将不会被截获。如果我把:
@Bean
public ProducerTemplate producerTemplate() {
return camelContext().createProducerTemplate();
}
在我的应用程序配置中,使用它然后它会被截获。不确定这是否是预期的行为?