Apache Camel RouteBuilder 配置方法



我有一些现有的Web应用程序由通过高级开发,现在我正在支持和研究它。我试图从互联网上阅读许多关于阿帕奇骆驼的文章,但仍然无法理解重点。

让我展示一些扩展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()实际上在做什么吗?使用它和没有它有什么不同?

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

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

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

两个处理器(requestProcessor,transformProcessor(在同一个线程中运行。您可以通过在两个处理器中记录一个语句来确认这一点,例如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 );
}

相关内容

  • 没有找到相关文章

最新更新