Apache camel 拦截,更新所有 RouteBuilder 的 Exchange 消息,并继续
Apache camel intercept, update the Exchange message for all RouteBuilders, and continue
我有一个 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()
)的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
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);
});
}
}
它会被拦截,但似乎不会在每个 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());
我有一个 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()
)的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
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);
});
}
}
它会被拦截,但似乎不会在每个 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());