【问题标题】:Define multiple URI for one <to .../> element with camel-spring使用骆驼弹簧为一个 <to .../> 元素定义多个 URI
【发布时间】:2013-10-18 14:03:09
【问题描述】:

在 Java 中定义了一个 Apache Camel 路由,我可以做这样的事情

from("stream:in?promptMessage=Enter something: ")
  .loadBalance()
  .to("uria", "urib")

它就像一个魅力。

使用 Spring 上下文文件尝试此操作无效:

<c:camelContext id="defaultContext">
  <c:route id="defaultRoute">
    <c:from uri="stream:in?promptMessage=Enter something: "/>
    <c:loadBalance inheritErrorHandler="false">
      <c:to uri="uria, urib"/>
    </c:loadBalance>
    <c:to uri="stream:out"/>
  </c:route>
</c:camelContext>

任何想法,我如何为每个 &lt;c:to ... 元素设置多个 uri?我不想有多个 &lt;c:to ... 元素。有什么办法吗,例如有一个路由工厂通过列表吗?

我想要实现这一点的原因是什么:我想从配置文件中注入一个 URI 列表,将它们直接传递给 Camel 路由。

我使用的是 2.12.1 版的 Apache Camel。

【问题讨论】:

    标签: spring apache-camel


    【解决方案1】:
    1. 使用 RouteBuilder 类创建从某处读取 URI 的路由。
    2. 使用 contextScan 将路由构建器类加载到 Spring Camel 上下文中。请参阅 apache 网站上的使用 contextScan 部分。

    RouteBuilder 类应为

    @Component
    public class MyRoute extends SpringRouteBuilder {
    
        @Override
        public void configure() throws Exception {
            String URIs = // read all URI's from file or somewhere
            from("direct:start")
               .loadbalance()
               .to(URIs);
        }
    }
    

    【讨论】:

    • 对不起,我没有提到我想避免有多个
    • 最简单的方法是编写一个RouteBuilder 类并从某个地方读取您的URI。在 configure 方法中,您可以通过向 to 方法传递一个 URI 数组来轻松构建路由。 public void configure() throws Exception { String[] URIs= // read the URI's from a file from("mock:a") .loadBalance() .to(URIs); }
    • 好的,知道了。是否可以使用 Camel 元素将某个 RouteBuilder 构建的路由传递给 Spring Camel 配置配置?
    • 是的,这是可能的。请参阅camel.apache.org上的使用 contextScan 部分
    • 就是这样。肿瘤坏死因子。你想改变你的答案添加 1) 使用 RouteBuilder 和 2) 使用 contextScan 以便我可以接受你的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2017-12-21
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    相关资源
    最近更新 更多