为什么这个 Apache Camel 拦截不起作用?
Why does this Apache Camel intercept not work?
我有一个主要路线建设者:
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);
}
}
我有第二个 "intercept" 路线建设者:
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" 发送消息时:
public class App {
@Produce(uri="activemq:a.out")
private Producer producer;
public void run() {
producer.request("hello");
}
}
消息仍然到达 MainMessageConsumer 而不是被拦截。我做错了什么?
拦截器仅适用于同一路由构建器中的所有路由class。如果你想让它在两者上工作,那么创建一个基础class,并将拦截器放在那里,让其他路由扩展你的基础class,并在配置方法中调用它的超级(例如OO继承)
似乎是,如果您使用@Produce 注释创建您的生产者,那么它就不会被拦截。而如果我输入:
@Bean
public ProducerTemplate producerTemplate() {
return camelContext().createProducerTemplate();
}
在我的应用程序配置中,改为使用它,然后它确实被拦截了。不确定这是否是预期的行为?
我有一个主要路线建设者:
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);
}
}
我有第二个 "intercept" 路线建设者:
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" 发送消息时:
public class App {
@Produce(uri="activemq:a.out")
private Producer producer;
public void run() {
producer.request("hello");
}
}
消息仍然到达 MainMessageConsumer 而不是被拦截。我做错了什么?
拦截器仅适用于同一路由构建器中的所有路由class。如果你想让它在两者上工作,那么创建一个基础class,并将拦截器放在那里,让其他路由扩展你的基础class,并在配置方法中调用它的超级(例如OO继承)
似乎是,如果您使用@Produce 注释创建您的生产者,那么它就不会被拦截。而如果我输入:
@Bean
public ProducerTemplate producerTemplate() {
return camelContext().createProducerTemplate();
}
在我的应用程序配置中,改为使用它,然后它确实被拦截了。不确定这是否是预期的行为?