【问题标题】:Apache Camel: How do I use a substitution variable in <from uri=""> with the intent is to chang the endpoint value in the variableApache Camel:如何在 <from uri=""> 中使用替换变量,目的是更改变量中的端点值
【发布时间】:2021-01-15 10:53:58
【问题描述】:

所以我想要做的是使用来自和端点的消息,该端点存储在一个变量中,比如 TempVar(如下),位于路由的“from:”部分。

(通常我只会为每个“从”端点添加一个路由,但在这个特定的场景中,我需要将所有逻辑都包含在一个路由中。)

我打算为在 <.. stuff ..> 部分完成的每条消息更改变量“TempVar”中的值,目的是为“来自”实现一种负载平衡器循环样式:" 部分

类似这样的:

<camelContext>
 .. ..
  <route>
    <from uri="{{TempVar}}:queue:MY.QUEUENAME?mapJmsMessage=True&amp;concurrentConsumers=1"/>
   
    <.. stuff ..>

    <to uri="file:/dev/?allowNullBody=true&amp;autoCreate=false&amp;fileExist=append&amp;fileName=null"/>
  </route>
  .. ..
</camelContext>

此路由基本上消耗给定端点上队列的可用消息并将它们转发到“dev/null”

我尝试直接调用自定义创建的 bean 中的值而不是“TempVar”解决方案,在该 bean 中我操作 var 中的值(在骆驼上下文之外声明)但这会抛出: “原因:java.lang.UnsupportedOperationException:您不能从 bean 端点消费”

PS!我们不是使用 java 代码来编写路由,而是使用“蓝图”

有没有人对如何在“from:”中使用替换变量(如上例所示)或“from:”部分的 RR 负载均衡器类型逻辑的不同方法有很好的建议?

兄弟莫拉

【问题讨论】:

    标签: routes apache-camel apache-karaf blueprint


    【解决方案1】:

    当 Camel Context 启动时,所有的路由都被构建并启动。这是启动期间的一次性过程。

    也就是说,无论您以何种方式在变量中定义 from 端点,都不可能在运行时动态更改该端点

    这是因为构造的路线是一种“静态”的。构建路由时,from 端点地址被“烘焙”为静态值,无论是硬编码还是通过代码中的变量提供。

    当您的动态值在运行时发生变化时,路由不会改变,因为它不再链接到您的变量。

    当您想更改路由from 端点时,我认为您必须创建新路由并销毁旧路由。我想这在运行时是可能的,但是由于您想为每条消息更改它,所以这样做感觉有点“错误”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多