java - Apache Camel 拦截,更新所有 RouteBuilder 的 Exchange 消息,然后继续

标签 java jms apache-camel enterprise-integration

我有一个 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/

相关文章:

java - 如何在拖动 jscrollbar 句柄时正确更改 Pane 内容

java - 在 java 中将缩短的 url 扩展为其原始全长 url

java - 有没有办法在没有选择器的情况下在 JMS 中实现多对多关系?

java - 每个集群一个套接字连接

java - Apache Camel - 从 JVM 崩溃中恢复

java - Edittext.setmaxLines(3) 以编程方式不起作用

java - 如何在 Struts 2 中使用 jQuery Ajax 检查唯一用户?

spring - apache.camel 与 Spring.Boot v2.0 的不兼容版本

java - 使用 SSL java 客户端连接到 Tibco EMS

url-rewriting - 当 tuckey urlrewrite 将支持 jakarta 和 tuckey urlrewrite 的替代品