如何解决Apache Camel:如何在 <from uri=""> 中使用替换变量,目的是更改变量中的端点值
所以我想要做的是消费来自和端点的消息,该端点存储在一个变量中,如位于路由“from:”部分的 TempVar(如下)。
(通常我只会为每个“来自”端点添加一个路由,但在这个特定场景中,我需要在单个路由中涵盖所有逻辑。)
我打算为 <.. stuff ..> 部分中使用的每条消息更改变量“TempVar”中的值,目的是为“from :"部分
像这样:
<camelContext>
.. ..
<route>
<from uri="{{TempVar}}:queue:MY.QUEUENAME?mapJmsMessage=True&concurrentConsumers=1"/>
<.. stuff ..>
<to uri="file:/dev/?allowNullBody=true&autocreate=false&fileExist=append&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 举报,一经查实,本站将立刻删除。