我有这个:
<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" />
我认为我配置的是异步队列。我希望能够将消息丢弃到它上面,然后让其他线程接收并稍后进行处理。然而,在这个问题上,它似乎以同步方式进行。
我做错了(显而易见的是),但是想知道这个配置中是否有我遗漏的东西,或者我的方法是否错误?
干杯
答案 0 :(得分:4)
默认情况下,Spring Integration中的所有通道都是同步的。这是一个有意识的设计决策,可以帮助您保持事务边界和安全上下文。当您想要进行异步切换时,您应该将一个任务执行程序添加到您的调度程序或队列到您的频道:
<channel>
<dispatcher task-executor="pool"/>
</channel>
<channel>
<queue capacity="10"/>
</channel>
请参阅参考指南中的channel configurations,了解有关调度程序和队列的一些详细信息。另请参阅section on DirectChannel和那个下面的ExecutorChannel部分。