java - Spring - 用于发送邮件的异步队列

标签 java email queue spring-integration

我有这个:

 <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 都是同步的。这是一个有意识的设计决策,例如,它将帮助您保持事务边界和安全上下文。当你想进行异步切换时,你应该向你的调度程序添加一个任务执行器或向你的 channel 添加一个队列:

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

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

channel configurations在引用指南中了解有关调度程序和队列的一些详细信息。另见 section on DirectChannel以及下面关于 ExecutorChannel 的部分。

关于java - Spring - 用于发送邮件的异步队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3117775/

相关文章:

algorithm - 一起实现堆栈和队列的最有效方法?

java - 如何用最小库制作左右 channel 的两个FFT对象进行处理

android - DDMS 不在设备上显示程序数据

python - 在 Google App Engine 上使用 Mandrill/MailChimp 发送确认邮件

php - 从电子邮件表中收集所有电子邮件

c++ - 为什么 std::queue 使用 std::dequeue 作为底层默认容器?

php - 有没有好的PHP脚本运行框架推荐?基于队列的脚本触发器

java - 在迷宫中寻找最短路径

java - Gson为什么要给String加斜杠

java - 如何按显示值而不是内部值对表进行排序?