【发布时间】:2016-02-14 07:07:22
【问题描述】:
我有一个CamelConfiguration,它配置了 15 个Routes。
public class CamelRoutesConf extends CamelConfiguration {
@Override
public List<RouteBuilder> configure() {
List<RouteBuilder> routes = super.routes();
routes.forEach(router -> {
router.onException(Exception.class).delay(5000);
});
return routes;
}
}
我想要实现的是检查路由内每个传入Message(exchange.getHeaders())的标头,如果不存在则添加标头。
我可以在每个RouteBuilder 中使用Processor 来实现这一点。例如。
public class ArtistHiredRouteBuilder extends RouteBuilder {
@Override
public void configure(){
from(incomingArtistsQ)
.process(new Processor(){
public void process(Exchange exchange){
exchange.getIn().setHeader("JMSCorrelationId", randomNumberOfLength10());
}
})
.to(outgoingArtistsQ)
}
目的是在所有交换消息之间使用相同的id,以便以后更容易关联它们。
那么,CamelConfiguration#configure 中是否有骆驼方式来执行此操作,以便它适用于所有 Routes。
我预计拦截如下。
public class CamelRoutesConf extends CamelConfiguration {
@Override
public List<RouteBuilder> configure() {
List<RouteBuilder> routes = super.routes();
routes.forEach(router -> {
router.interceptFrom().process(headerProcessor)
router.onException(Exception.class).delay(5000);
});
}
}
它将被拦截,但似乎不会在每个RouteBuilder 中继续使用.to()。
参考文献
http://camel.apache.org/intercept.html
http://www.davsclaus.com/2009/05/on-road-to-camel-20-interceptors-round.html
【问题讨论】:
标签: java jms apache-camel enterprise-integration