如何动态更改 Talend ESB 路由中的目的地?
How can I dynamically change destination in Talend ESB route?
我有一个简单的 Talend 路由:
cMQConnectionFactory (mq config) -- cJMS (reads from mq) --> cHttp (send to REST on another machine)
我希望能够根据消息内容更改 cHttp 目标 (Uri)。消息是 JSON,其中包含一个字段 "address",我需要将消息发送到该字段。
Talend 路由是否允许动态更改目的地?
还是我完全误解了这个概念,需要为每对消息单独创建路由 "producer-consumer"?
我用 `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");
}
不幸的是,这是在初始化期间完成的,因此该值是恒定的(就像 Mediation 中的几乎所有内容一样)
解决方案:
1) 带有特定的目的地列表
您可以使用 cMessageRouter
作为开关将消息发送到正确的 cHttp(这意味着每个目的地一个 cHttp
)
2) 目的地未知
您可以使用作业来管理该动态目标以生成您的 URI 并从那里发送请求。我不确定你是否也能从这份工作中获得价值(出于同样的原因)
您可以使用 cDSLProcessor 组件轻松完成此操作。根据您的数据动态设置一些 headers,然后在 DSLProcessor 中写入 .to("http://"+echange.getIn().getHeader("myheader")
我有一个简单的 Talend 路由:
cMQConnectionFactory (mq config) -- cJMS (reads from mq) --> cHttp (send to REST on another machine)
我希望能够根据消息内容更改 cHttp 目标 (Uri)。消息是 JSON,其中包含一个字段 "address",我需要将消息发送到该字段。
Talend 路由是否允许动态更改目的地?
还是我完全误解了这个概念,需要为每对消息单独创建路由 "producer-consumer"?
我用 `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");
}
不幸的是,这是在初始化期间完成的,因此该值是恒定的(就像 Mediation 中的几乎所有内容一样)
解决方案:
1) 带有特定的目的地列表
您可以使用 cMessageRouter
作为开关将消息发送到正确的 cHttp(这意味着每个目的地一个 cHttp
)
2) 目的地未知
您可以使用作业来管理该动态目标以生成您的 URI 并从那里发送请求。我不确定你是否也能从这份工作中获得价值(出于同样的原因)
您可以使用 cDSLProcessor 组件轻松完成此操作。根据您的数据动态设置一些 headers,然后在 DSLProcessor 中写入 .to("http://"+echange.getIn().getHeader("myheader")