2017-06-15 15 views
0

マップの内容に基づいてルーティングメッセージ、JMSメッセージヘッダフィールドに従ってラクダでメッセージをルーティングするための私のコードは次のようになりますtypeヘッダフィールドの値にキャメル:現在

// MyRouteBuilder.java 
@Override 
public void configure() { 

    from(...) 
     .choice() 
      .when(header("type").isEqualTo("A")) 
       .to("proc_a:1") 
      .when(header("type").isEqualTo("B")) 
       .to("proc_b:1", "proc_b:2", "proc_b:3") 
      .when(header("type").isEqualTo("C")) 
       .to("proc_c:1", "proc_c:2") 
      .when(...) 
       .to(...) // ~15 more branches to follow 
      .otherwise() 
       .to("proc_default"); 
} 

Dependendそれぞれの場合に使用すべきプロセッサの特定のパイプラインが存在する。ご覧のように、コードは繰り返しだけでなく、維持するのが面倒です。

すでにプロセッサにタイプをマップする動的に作成されたMap<String, String[]>があります。キーB["proc_b:1", "proc_b:2", "proc_b:3"]を返します。しかし、私は上記のシナリオでそれをどのように利用するのか分かりません。

また、dynamic routerについても読んでいます。しかし、与えられた例は本当に私を助けてくれなかったし、ルーティングロジックの状態を管理したり、スレッドの安全性を保証したりすることで、複雑さを増やしたくない。

すべてのソリューションに感謝します。唯一の要件は、私がCamel 2.15に固執していることと、既存のプロセッサーを適応させることができないことです(これは特に、ルーティングロジックが後で必要となるためヘッダーフィールドを削除すべきでないことを意味します)。

答えて

0

あなたにルーティングするためのURLを計算するために、いくつかのJavaメソッドを使用します(例:toD)へのダイナミックな利用、:にダイナミックについてだけでなくhttp://camel.apache.org/how-to-use-a-dynamic-uri-in-to.html、ここで:応答のためのhttp://camel.apache.org/message-endpoint.html

+0

感謝を。残念ながら、私はキャメル2.15についていることに言及していませんでした。あなたのリンクによれば、私は '.recipientList()。method(MessageRouter.class、" routeTo ");'と一緒に行かなければならないと思います。これは2つの質問に私をもたらします。 ** 1。**どのように 'MessageRouter'の内部からヘッダーにアクセスできますか? ** 2。**私の理解から、受信者リストのパターンは、*同じ*メッセージを複数の宛先に配信します。しかし、私の場合、各ヘッダーは、順次呼び出されるべきプロセッサーのリストにマップされます(例えば、* proc_b:2 *は* proc_b:1 *によって行われた変更を参照してください)。 – ceran

+0

複数のエンドポイント実際にはこれは受取人リストEIPのことであり、受取人リストで決められた1つまたは複数の宛先にメッセージを送ることです。 –

+0

私はそれを理解していますが、母国語以外の話者として、 * "... 2番目の部分は単純にリストを横断し、受け取ったメッセージのコピーを各受信者" *に送信します。この場合、コピーとは単に(つまり、すべての受信者が変更を見ることができるように)全く同じオブジェクトですか?それとも個々のコピーについて実際に話していますか? – ceran