Routing 如何在Talend ESB路由中动态更改目的地?

Routing 如何在Talend ESB路由中动态更改目的地?,routing,talend,Routing,Talend,我有一个简单的塔伦德路线: cMQConnectionFactory(mq配置)--cJMS(从mq读取)-->cHttp(发送到另一台机器上的REST) 我希望能够根据消息内容更改cHttp目的地(Uri)。消息是一个JSON,带有一个字段“address”,我需要将消息发送到该字段 Talend routes是否允许动态更改目的地 或者我完全误解了这个概念,需要为每对消息“生产者-消费者”单独创建路由吗?我使用`uri=“foobar”设置了一个cHttp,以便在生成的代码中轻松找到设置。你

我有一个简单的塔伦德路线:

cMQConnectionFactory(mq配置)--cJMS(从mq读取)-->cHttp(发送到另一台机器上的REST)

我希望能够根据消息内容更改cHttp目的地(Uri)。消息是一个JSON,带有一个字段“address”,我需要将消息发送到该字段

Talend routes是否允许动态更改目的地

或者我完全误解了这个概念,需要为每对消息“生产者-消费者”单独创建路由吗?

我使用`uri=“foobar”设置了一个cHttp,以便在生成的代码中轻松找到设置。你可以看到它设置在里面

public void configure() throws java.lang.Exception {
     ...
     from(
            "timer:cTimer_1" + "?period=" + 2500 + "&repeatCount=" + 10
                    + "&delay=" + 1000)
            .routeId("Route_cTimer_1")
            .setHeader("CamelHttpMethod", constant("GET")).to("foobar")

            .id("Route_cHttp_1");
}
不幸的是,这是在初始化过程中完成的,因此该值是常量(与中介中的几乎所有内容一样)

解决方案:

1)具有特定目的地列表

您可以使用
cMessageRouter
作为开关将消息发送到正确的cHttp(这意味着每个目的地一个
cHttp

2)目的地未知


您可以使用作业来管理动态目标,以生成URI并从那里发送请求。我不确定您是否可以从作业中获得值(出于同样的原因)

您可以使用cDSLProcessor组件轻松地实现这一点。从数据中动态设置一些头,然后在DSLProcessor中写入
.to(“http://“+echange.getIn().getHeader(“myheader”)

您应该能够通过使用JSONPath/Xpath查询提取数据(例如,通过cSetHeader组件将其放入头中)来实现这一点。之后,您可以使用新的头${header.yourName}在cHttp组件中。@Corentin您能添加一些详细信息吗?我对这方面非常陌生。我有一个来自MQ的json字符串,带有字段“address”,这是我需要调用的REST服务的url。应该如何操纵它?谢谢您的回答!所以路由似乎只能是“静态的”(在编译时定义)@Kromster实际上是在运行时开始时定义的。您可以使用上下文变量并设置不同的环境(使用默认值),甚至可以使用cConfig从属性文件加载值(还记得我们是如何做到的…)这将在configure方法之前加载值,但是如果您想更新任何内容,则需要重新启动路由。因此,它实际上并不在运行时,但仍然不是完全动态的。