我有这个:

 <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" />

我以为我配置的是异步队列。我希望能够将消息拖放到其上,并让另一个线程将其拾取并处理,然后再处理。但是,就目前而言,它似乎是以同步方式进行的。

我是不是做错了(很明显是),但是想知道我在此配置中是否缺少某些东西,或者我是否使用了错误的方法?

干杯

最佳答案

默认情况下,Spring Integration中的所有通道都是同步的。这是一个有意识的设计决策,例如,它将帮助您保留事务边界和安全上下文。当您要进行异步切换时,应将任务执行程序添加到调度程序中,或将队列添加到通道中:

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

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

请参阅参考指南中的channel configurations,以获取有关调度程序和队列的一些详细信息。另请参见section on DirectChannel和该代码下的ExecutorChannel一节。

10-04 20:51
查看更多