0

私はApache Camel DSLを使用していて、メッセージをルーティングする方法を見つけようとしています。Camel DSL を使用しない場合のロジックは次のとおりです。

  • メッセージがキューに入る
  • コールビーン
  • Bean に例外がない場合
    • 元のメッセージで別の Bean を呼び出す

私の問題は、元のメッセージを使用してステップ 3.a に進む方法がわからないことです。bean の呼び出しによってメッセージが変更されます。マルチキャスト、2 つのパイプライン、およびヘッダー変数を使用できますが、これらのヘッダー変数はパイプライン内のスコープ内にあることがわかります。

どんなアイデアでも大歓迎です!ありがとう!

4

3 に答える 3

2

シーケンス モードでマルチキャスト eip を使用できます

<from uri="somewhere"/>
<multicast>
  <to uri="bean:beanA"/>
  <to uri="bean:beanB"/>
</multicast>

マルチキャストはデフォルトでシーケンス モードで実行されるため、最初に beanA を呼び出します。それが成功した場合は、beanB を呼び出しますが、元のメッセージ (beanA を呼び出したのと同じメッセージのコピー) を使用します。

ここでマルチキャスト EIP について読むことができます: http://camel.apache.org/multicast.html

于 2012-11-30T08:07:19.997 に答える
1

2番目のBeanから、呼び出すだけですexchange.getUnitOfWork().getOriginalInMessage()

于 2012-11-29T22:29:05.050 に答える
0

メッセージの内容を変数に保存し、変更後にメッセージをその内容に戻すことになりました...

<!-- store original content in header variable -->
<camel:setHeader headerName="marc"><camel:simple>${body}</camel:simple></camel:setHeader>
<!-- run some logic, output gets saved as another header variable, message as this point is now that output -->
<camel:bean ref="getPidsForUpdate"/>
<camel:setHeader headerName="pids"><camel:simple>${body}</camel:simple></camel:setHeader>

....その出力に基づいて一連の変数を設定し、次に

<!-- get original message to run some more logic-->
<camel:setBody><camel:simple>${headers.marc}</camel:simple></camel:setBody>
于 2012-12-05T01:01:22.783 に答える