1

CamelConfiguration15 を構成するがあります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()存在しない場合はヘッダーを追加することです。

Processoreach 内で使用してそれを達成できます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 を使用することです。これにより、後でそれらを簡単に関連付けることができます。

それで、すべてのsCamelConfiguration#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);
        });
     }
}

.to()傍受されますが、それぞれで続行されないようですRouteBuilder

参考文献

http://camel.apache.org/intercept.html

http://www.davsclaus.com/2009/05/on-road-to-camel-20-interceptors-round.html

4

1 に答える 1