apache camel java config引用其他路由器的路由器

时间:2017-04-12 15:29:07

标签: spring-boot apache-camel

我正在将apache camel路由从XML转换为基于Java的过程。在XML中,我可以使用ref属性引用来自另一个路由器的路由器,如下面的小代码片段:

<route>
     <from ref="process"/>
     <to ref="logging"/>
</route>

<route>
    <from ref="logging"/>
    <to uri="bean:xyz?method=hello"/>
</route>

现在,如果我使用Java,我无法找到如何从其他路由器引用路由器的选项。

@Bean (name = "loggingRouter")
    RoutesBuilder loggingRouter() {
            return new RouteBuilder() {
                @Override
                public void configure() throws Exception {
                    from("xyz")
                        .bean(abc, "log");
                }
            };
        }

我想在其他路由中使用Java引用上面创建的路由。我该怎么做?我在春季启动1.4.3和骆驼2.18.1。

更新问题,因为我无法在评论中添加代码段,

我们在java类中有多个RoutesBuilder,我们根据条件

创建每个
@Bean (name = "abc")
    @ConditionalOnProperty (name = "someproperty", havingValue = "true")
    RoutesBuilder directSMSRouter() {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("direct:sendSMS")
                    .bean(abc, "sendSmsMessage");
            }
        };
    }

    @Bean (name = "xyz")
    @ConditionalOnExpression ("'${someproperty1}'.equalsIgnoreCase('true') ||" +
                              "'${someproperty2}'.equalsIgnoreCase('true') ||" +
                              "'${someproperty3}'.equalsIgnoreCase" +
                              "('true') || '${someproperty4}'.equalsIgnoreCase('true') ")
    RoutesBuilder directEmailRouter() {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("direct:sendEmail")
                    .bean(xyz, "sendMessage");
            }
        };
    }

我们可以在configure方法中创建多个路由,但我的问题是如何在RoutesBuilder bean中引用一个路由创建其他路由不同的RoutesBuilder

1 个答案:

答案 0 :(得分:0)

首先,这个java代码正在创建一个RouteBuilder。我认为您的应用程序中不能有多个RouteBuilder。你在configure方法中做的是创建路由。您可以在configure方法中编写所需的路由。你可以写另一行,比如。

from("blah blah").to("xyz")

这应该为这个过程服务。 看看Spring RouteBuilder