Apache camel 使用动态URI及其执行次数进行查询

Apache camel 使用动态URI及其执行次数进行查询,apache-camel,Apache Camel,我想根据系统的主机名和其他一些逻辑来听ActiveMQ主题。我计划为此使用pollRich,因此我评估了我的逻辑,并在pollRich中提供了主题名称,但: pollEnrich或enrich不访问当前Exchange的任何数据,这意味着在轮询时,它无法使用您在Exchange上设置的任何现有标头。例如,您不能在Exchange.FILE\u NAME标题中设置文件名,并使用pollEnrich仅使用该文件。为此,必须在端点URI中设置文件名 我怎么能弄明白呢 from("timer://ipc

我想根据系统的主机名和其他一些逻辑来听ActiveMQ主题。我计划为此使用
pollRich
,因此我评估了我的逻辑,并在
pollRich
中提供了主题名称,但:

pollEnrich
enrich
不访问当前Exchange的任何数据,这意味着在轮询时,它无法使用您在Exchange上设置的任何现有标头。例如,您不能在
Exchange.FILE\u NAME
标题中设置文件名,并使用
pollEnrich
仅使用该文件。为此,必须在端点URI中设置文件名

我怎么能弄明白呢

from("timer://ipc?repeatCount=1")
.. some logic..
.setHeader("topic_no",simple("{{env:HOSTNAME}}"))
.pollEnrich("mqtt:foo?host=tcp://0.0.0.0:1883&subscribeTopicNames=${header.topic_no}/status&clientId=ipc")
.to("log:my?showAll=true&multiline=true");
请不要建议在URI中直接使用主机名。正如我强调的,我还必须计算其他逻辑

  • 我还可以使用什么其他选项或方法
  • 是继续听这个话题,还是只听一次就结束了
更新1: 我发现我们可以使用简单表达式来表示动态URI,但它的一个问题是只选择一条消息,我如何确保它作为消费者继续侦听?我希望在pollEnrich部分执行一次之前,TopicListener会一直监听,直到应用程序启动

是继续听这个话题,还是只听一次就结束了

正如您所了解的,Camel
pollEnrich
组件将侦听主题,并且每次调用最多使用一条消息

我还可以使用什么其他选项或方法

  • 通过
    loop
  • 通过
    routeBuilder在运行时创建新路由
  • 选项1很幼稚,但概念很简单<代码>循环将执行一次,而
    循环
    将重复该操作。然而,这种方法需要处理比您预期的更多的场景

    选择2是一个更好的办法。您在运行时创建一个路由,并且使用者端点URI是passby变量。也就是说,您可以在计算逻辑之后动态创建使用者路由