有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Apache Camel RouteBuilder配置方法

我有一些现有的网络应用程序开发通过高级,现在我支持和研究它。我试着从网上读了很多关于阿帕奇骆驼的文章,但还是没能抓住重点

让我展示一些扩展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) 个答案

  1. # 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 );
    }