2017-03-09 12 views
0

私はSpring Integrationを使用しようとしており、チェーンスレッドに関するいくつかの情報はdocでは見つかりません。私は、XMLを持っている:Spring統合チェーンスレッド

<task:executor 
     id="worker" 
     pool-size="5" 
     queue-capacity="5" 
     rejection-policy="CALLER_RUNS"/> 

<int:channel id="inputChannel" datatype="javax.xml.bind.JAXBElement"> 
    <int:dispatcher task-executor="worker"/> 
</int:channel> 

<int:chain input-channel="inputChannel" id="someChain"> 
    <int-ws:header-enricher> 
     <int-ws:soap-action value="${someValue}"/> 
    </int-ws:header-enricher> 
    <int:header-enricher> 
     <int:header name="url" value="${someUri}"/> 
    </int:header-enricher> 
    <int-ws:outbound-gateway uri="${someUri}" 
          ignore-empty-responses="true" 
          requires-reply="true" 
          marshaller="someMarshaller" 
          interceptors="someMessageInterceptors"> 
     <int-ws:request-handler-advice-chain> 
      <ref bean="integrationInterceptor" /> 
     </int-ws:request-handler-advice-chain> 
    </int-ws:outbound-gateway> 
</int:chain> 

そして、私の質問:結果的にそのチェーンの仕事内のすべてのエンドポイントしますが、すべて別々のスレッドで?ゲートウェイの応答と要求は別々のスレッドで動作しますか? 1つのチェーンエンドポイントの情報を保存するためにThreadLocalを使用し、そのチェーンの次のエンドポイントでその情報を使用できますか?

答えて

0

はい、チェーン内の各コンポーネントは同じスレッドで実行されます。

はい、ThreadLocalを使用してコンポーネント間でデータを伝えることができますが、代わりにメッセージヘッダーを使用することがよくあります。

+0

返信いただきありがとうございます。 Client Interceptorで情報を取得する必要があります。それは私が統合メッセージのヘッダーを得ることができないようだ - 石鹸の封筒のみ。本当ですか? – alexsodev

+0

これは正しいです。 –