2017-06-19 10 views
0

私は簡単な才能のルートを持っている:Talend ESBルートで目的地を動的に変更する方法はありますか?

cMQConnectionFactory(MQの設定) - cJMS(MQからの読み込み) - > CHTTP(別のマシン上でRESTに送る)

私はなりたいですメッセージコンテンツに基づくcHttp宛先(Uri)を変更することができます。メッセージは、メッセージを送信する必要のあるフィールド「アドレス」を持つJSONです。

Talendルートは宛先を動的に変更できるのですか?

コンセプトを完全に誤解していて、メッセージ "プロデューサ - コンシューマ"のペアごとに個別にルートを作成する必要がありますか?

+0

JSONPath/Xpath Queryを使用してデータを抽出することで、これを行うことができます(たとえば、cSetHeaderコンポーネントを使用してヘッダに挿入します) )。その後、新しいヘッダ$ {header.yourName}をcHttpコンポーネントで使用できます。 – Corentin

+0

@Corentin詳細を追加してください。私は本当にこのようなものに新しいです。私はMQからの文字列としてjsonを持っています。フィールド "アドレス"は、呼び出す必要のあるRESTサービスのURLです。どのように組み立てる必要がありますか? – Kromster

答えて

1

生成されたコードの設定を簡単に見つけるために、 `uri =" foobar "でcHttpを設定しました。で

1):あなたはそれが

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"); 
} 

残念ながら、値が(調停のほぼすべてのもののように)一定であるので、これは、初期化中に行われ

ソリューションの内側に設定されて見ることができます先の特定のリスト

あなたは正しいCHTTPにメッセージを送信するようにスイッチとして動作するようにcMessageRouterを使用することができます(これは、宛先ごとに1 cHttpを意味します)未知の宛先で

2)

あなたのURIを生成し、そこからのリクエストを送信するためにそのダイナミック先を管理するジョブを使用することができます。

+0

あなたの答えをありがとう!だから、ルートは "静的"(コンパイル時に定義されている)にすぎないようです。 – Kromster

+1

@Kromsterは実際にランタイムの開始時に定義されます。コンテキスト変数を使用して別の環境(デフォルト値)を設定することもできますし、cConfigを使ってプロパティファイルから値を読み込むこともできます(これをどのように行ったかを覚えておくことができます)。何かを更新したい場合は、ルートを再起動する必要があります。したがって、実際には実行時ではありませんが、まだ完全に動的ではありません。 – AxelH

関連する問題