1

マルチキャスト コンポーネントでエンドポイント固有のヘッダー値を設定したいと考えています。

以下のような XML DSL:

<route>

<from uri="direct:testRoute"/>
<multicast strategyRef="MyAggregator" parallelProcessing="true">
<to uri="direct:call1"/> <!-- set the header MY_HEADER = "call_1" -->
<to uri="direct:call2/> <!-- set the header MY_HEADER = "call_2" -->
</multicast>

</route>

基本的には、応答集計で知りたいのですが、この応答がどのサービス要求に属しているかです。

私はこれをやってみましたが、正しい方法ではありません (解析例外):

<to uri="direct:call1"> 
      <setHeader headerName="MY_HEADER"><simple>call1</simple></setHeader>
 </to>

ドキュメントを読んでわかることは、マルチキャストはソース Exchange をコピーし、各コピーをマルチキャストするということです。したがって、これは Exchange の浅いコピーであり、すべてのマルチキャスト受信者間で共有される一種の参照です。

しかし、ここでは、個々の受信者の特定のヘッダー値を探しています。

これを行う方法?ポインタはありますか?

4

2 に答える 2

2

マルチキャスト ルートではそれを行うことはできません。しかし、その後の直接ルートでは単純なはずです。

<route>
  <from uri="direct:call1"/>
     <setHeader headerName="MY_HEADER"><simple>call1</simple></setHeader>
     .. do whatever
  </from>
</route>

それ以外の場合、call1 が他の目的で使用されていて、ヘッダーをいつそのルートに入れるかがわからない場合は、単純な prep-route を作成します。

<route>
   <from uri="direct:prepCall1"/>
     <setHeader headerName="MY_HEADER"><simple>call1</simple></setHeader>
     <to uri="direct:call1"/>
  </from>
</route>

3 番目のオプションとして、マルチキャスト リストに DSL (xml または java) を配置できない場合でも、交換にヘッダーを追加する「onPrepareRef」プロセッサ Bean を提供できます。ただし、1 つのプロセッサがすべてのマルチキャスト エンドポイントを処理します。

于 2012-06-15T22:00:57.620 に答える
1

キー Exchange.TO_ENDPOINT を持つヘッダーがあり、2 つのエンドポイントのどちらからの応答かを確認できます。

于 2012-06-16T13:41:27.903 に答える