微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 端点时,我认为您必须创建新路由并销毁旧路由。我猜这在运行时是可能的,但是由于您想为每条消息更改它,所以这样做感觉有点“错误”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?