【问题标题】:Apache Camel RouteBuilder configure methodApache Camel RouteBuilder 配置方法
【发布时间】:2018-06-08 08:32:09
【问题描述】:

我有一些现有的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() 实际在做什么吗?使用它和不使用它有什么不同?

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

【问题讨论】:

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


    【解决方案1】:

    主要区别在于,在 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 );
    }
    

    【讨论】:

    • 感谢您的解释。结论我可以说他们仍然在做同样的事情,不同的是 1 与不同的线程分开,而另一个 1 使用相同的线程?
    • 是的。几点。您需要根据您在这两个处理器中执行的操作来决定哪个更适合您。这些操作是线程安全的吗?如果它们在单独的线程中运行并且它们需要按顺序运行是否可以。如果您可以在单独的线程中运行它们,那么我会这样做(使用to),因为您无需编写线程代码即可获得这种线程行为。接受/赞成。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多