4

私はこれを持っています:

 <si:poller max-messages-per-poll="10" id="defaultPoller" default="true">
  <si:interval-trigger interval="5000"/>
 </si:poller>
 <si:channel id="emailIn"/>
 <si:channel id="emailOut"/>

 <si:service-activator input-channel="emailIn" output-channel="emailOut" ref="mailService" method="recieveMessage"/>

 <si:gateway id="gateway" service-interface="com.blah.MailSender" default-request-channel="emailIn"/>

 <si:outbound-channel-adapter channel="emailOut" ref="mailService" method="recieveMessage" />

そして、私が構成しているのは非同期キューだと思いました。メッセージをその上にドロップし、他のスレッドにメッセージを取得して後で処理してもらいたいです。しかし、その瞬間、それは同期的にそれを行うようです。

私はそれを間違っていますか(明らかにそうです)、この構成に欠けているものがあるのか​​、それとも間違ったアプローチをしているのか疑問に思っていますか?

乾杯

4

1 に答える 1

4

デフォルトでは、SpringIntegrationのすべてのチャネルは同期しています。これは、たとえばトランザクションの境界やセキュリティコンテキストを維持するのに役立つ、意識的な設計上の決定です。非同期ハンドオフを実行する場合は、タスクエグゼキュータをディスパッチャに追加するか、キューをチャネルに追加する必要があります。

<channel>
  <dispatcher task-executor="pool"/>
</channel>

<channel>
  <queue capacity="10"/>
</channel>

ディスパッチャとキューの詳細については、リファレンスガイドのチャネル構成を参照してください。DirectChannelのセクションとその下のExecutorChannelのセクションも参照してください。

于 2010-06-28T12:32:52.427 に答える