Apache Camel RouteBuilder配置方法

时间:2018-06-08 08:32:09

标签: java spring web-services soap apache-camel

我有一些现有的Web应用程序通过高级开发,现在我正在支持和研究它。我试图从互联网上阅读关于Apache Camel的许多文章,但仍然无法明白这一点。

让我展示一些扩展RouteBuilder的类代码:

这是来自FserviceRouteBuilder类:

@Override
public void configure() throws Exception {
    log.debug( "FServiceRouteBuilder configure" );
    errorHandler( deadLetterChannel( ).maximumRedeliveries( 0 ) );

    from( this.from ).process( requestProcessor ).process(
            transformProcessor );

    log.debug( "FServiceRouteBuilder configure end" );

}

这是来自MyBillRouteBuilder

@Override
public void configure() throws Exception {

    log.debug( ">>MybillRouteBuilder configure" );
    errorHandler( deadLetterChannel( ).maximumRedeliveries( 0 ) );

    from( this.from ).process( requestProcessor ).to(
            "direct:_mybill-process-response" );

    if ( transformProcessor != null ) {
        from( "direct:_mybill-process-response" ).process(
                transformProcessor );
    }

    log.debug( ">>MybillRouteBuilder configure end" );

}

我从不同的地方看到,MyBillRouteBuilder使用的to()方法是to( "direct:_myebill-process-response" ),但FServiceRouteBuilder并没有这样做。

但他们两个都有效。我尝试更改FServiceRouteBuilder以使用to()方法及其工作。

他们都使用SOAP方法调用和处理特定的Web服务。

我可以知道to()实际上在做什么吗?使用它和没有它有什么不同?

对不起,我对此非常陌生。

1 个答案:

答案 0 :(得分:1)

主要区别在于,在FServiceRouteBuilder中,路由中的所有步骤都在同一个线程中运行。

from( this.from ).process( requestProcessor ).process(
        transformProcessor );

两个处理器(requestProcessor,transformProcessor)都在同一个Thread中运行。您可以通过在Thread.currentThread().getId()这两个处理器中记录语句来确认这一点。

而使用MyBillRoutebuilder,您的第二个处理器(transformProcessor)与第一个处理器(使用to)分离,并且它在一个单独的线程中运行。

from( this.from ).process( requestProcessor ).to(
            "direct:_mybill-process-response" );

if ( transformProcessor != null ) {
    from( "direct:_mybill-process-response" ).process(
                transformProcessor );
}