Apache Camel:如何在 <from uri=""> 中使用替换变量,目的是更改变量中的端点值

问题描述

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

(通常我只会为每个“来自”端点添加一个路由,但在这个特定场景中,我需要在单个路由中涵盖所有逻辑。)

我打算为 <.. stuff ..> 部分中使用的每条消息更改变量“TempVar”中的值,目的是为“from :"部分

像这样:

<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”解决方案,我在其中操作 var 中的值(在骆驼上下文之外声明),但这会抛出: “由:java.lang.UnsupportedOperationException:您不能从 bean 端点消费”

附上!我们没有使用java代码来编写路由,我们使用的是“蓝图”

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

莫拉兄弟

解决方法

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

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

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

当您的动态值在运行时发生变化时,路由不会改变,因为它不再与您的变量相关联。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...