我有一个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()
)的标题,如果它不存在则添加一个标题。
我可以Processor
在每个RouteBuilder
. 前任。
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
以便它适用于所有Route
s.
我预计拦截如下。
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);
});
}
}
它会被拦截,但似乎不会.to()
在 each中继续RouteBuilder
。
参考
http://camel.apache.org/intercept.html
http://www.davsclaus.com/2009/05/on-road-to-camel-20-interceptors-round.html