我有一个 CamelConfiguration
,它配置了 15 个路由
。
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()
)的 header ,并添加 header (如果不存在)。
我可以在每个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
中是否有Camel方法可以做到这一点,以便它适用于所有Route
。
我预计拦截如下。
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
最佳答案
您可以使用interceptFrom()子句为所有路由设置 header 值
// intercept all incoming routes and do something...
interceptFrom().setHeader(JMSCorrelationId", randomNumberOfLength10());
关于java - Apache Camel 拦截,更新所有 RouteBuilder 的 Exchange 消息,然后继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33680242/