【问题标题】:Apache camel intercept, update the Exchange message for all RouteBuilders, and continueApache骆驼拦截,更新所有RouteBuilders的Exchange消息,然后继续
【发布时间】: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


    【解决方案1】:

    您可以使用interceptFrom() 子句为所有路由设置标头值

    // intercept all incoming routes and do something...
    interceptFrom().setHeader(JMSCorrelationId", randomNumberOfLength10());
    

    【讨论】:

    • 用.interceptFrom().process(myProcessor) 和CamelRoutesConf #configure 尝试了类似的方法。但根本不拦截。在每个RouteBuilders 中的.from().to(); 之后执行
    • 有趣,这确实有效。让我进一步挖掘,以便可以测试它。
    • 在拦截.from() 之后,interceptFrom() 是否继续路由构建器.to()?我觉得这样不行??
    • 我的目标是拦截from(Queue),然后将标头添加到交换并继续.to(Queue)。我也试过"direct:addCorrelationId",没有运气
    猜你喜欢
    • 1970-01-01
    • 2015-07-07
    • 2018-06-09
    • 2014-09-23
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2011-08-27
    • 2013-01-24
    相关资源
    最近更新 更多