当前位置: 首页 > 知识库问答 >
问题:

动态“自”endpoint和交换在camel中如何工作?

孟佑运
2023-03-14

我有点纠结于动态路由概念和消费者规则。

假设我有一个带有交换数据的路由,然后我想在“从”endpoint的不同路由中使用来自交换的报头。

我想它看起来是这样的:

一号干线:

from("file:/dir1")
...
.to ("direct:start");

二号干线:

from("direct: start")//get the old exchange data
.from("file:/dir1/?fileName=${header.myHeader}")//start consuming from a different endpoint using old exchange data
...
.to("direct: end);

所以这些步骤对我来说似乎是正确的,但我觉得我有点污染了交流。

对我来说,我使用动态路由,但同时也创造了一个新的消费者。这意味着我要创建一个新的交易所,对吗?那么,骆驼如何知道在剩下的路线中选择和使用哪种交换呢?

起初我认为它可能将它们结合在一起,但我做了更多的挖掘,发现你实际上需要使用“丰富”来添加到现有的交换中。

有人能解释一下骆驼是如何处理这种情况的吗?如果你有一个很好的例子。我在骆驼包里找了一个,但没有成功。

共有1个答案

濮丁雷
2023-03-14

您可以使用内容丰富模式实现“动态自”。

假设您的第一个路由用于将文件名添加到头文件中,例如:

from("timer:trigger?repeatCount=1")
.routeId("define-file-name")
.setHeader("myHeader", constant("file.txt"))
.to("direct:start");

然后,您的第二个路由可以像这样使用来自交换头的信息轮询该文件。

from("direct:start")
.routeId("poll-file")
.pollEnrich().simple("file://dir1?fileName=${in.header.myHeader}").timeout(10000)
.log("${body}");
 类似资料:
  • 在中,我正在填充和。现在,我需要定义一个新的路由,它使用来自上传队列的消息,并复制一个本地文件夹(基于在上一个路由中生成的Id),并将其上传到目标文件夹,该文件夹是一个ftp服务器(这也在上一个路由中填充) 那么,如何设计一条新的路线,其中从和到终点都是动态的,如下所示?

  • 我试图熟悉EIP和Apache骆驼,我有一个用例,我不太确定如何使用骆驼来表达或实现 用例: 假设您设计了一个集成解决方案,它从ftp中获取文件,进行一些处理并将其上传到队列。您选择Apache Camel来实现此解决方案,并且您在JavaDSL中的路由如下所示: 路线可能比这复杂得多,但在这里没关系。想象一下你的解决方案是如此的成功,以至于有一个计划来实现一个服务,任何人都可以添加他的ftp服务

  • 我们正在使用Camel MQTT组件订阅几个主题并执行路由逻辑。 在某些情况下,我们使用动态endpoint在运行时设置发布主题名称,该名称最多可用于15个并发连接的endpoint。 一旦创建第16个动态endpoint(toD()-call),连接到mqtt代理时就会出现超时。 如果Mqtt组件的并发连接endpoint是在运行时创建的,那么这些endpoint是否有限制? 静态endpoin

  • 我有一个带有。RecipientList()的动态终结点,我希望在发生异常时更改终结点。下面是我的例子:

  • 我正在将xml从seda队列发送到JMS队列。我在exchange的标头中有一些metadeta,我想将其传递给JMS队列。 我是否必须从exchange对象的标头显式获取元数据,然后将其设置为xml?或者,如果Camel可以在开箱即用的情况下完成这项工作,那么还有其他方法吗?

  • 我正在使用Apache Camel,并试图使用Camel-Olingo2组件读取Odata,但每次都出现“ServiceURI”错误。我尝试过文档实现,但没有找到任何成功。请让我知道使用camel-olingo2组件与odata连接的方式。