为POP3访问配置并使用轮询器配置的Spring Integration Mail入站通道适配器在运行一段时间后会挂起

时间:2017-08-30 18:51:17

标签: spring-integration

<int:channel id="emailInputChannel"/>
<!-- Email Poller. Only one poller thread -->   
<task:executor id="emailPollingExecutor" pool-size="1" /> 
<int-mail:inbound-channel-adapter id="pop3EmailAdapter" store-uri="pop3://${pop3.user}:${pop3.pwd}@${pop3.server.host}/Inbox" 
channel="emailInputChannel" should-delete-messages="true" auto-startup="true" java-mail-properties="javaMailProperties">
           <int:poller max-messages-per-poll="1" fixed-delay="${email.poller.delay}" task-executor="emailPollingExecutor"/>
</int-mail:inbound-channel-adapter>
<!-- Java Mail POP3 properties -->
<util:properties id="javaMailProperties">
  <beans:prop key="mail.debug">true</beans:prop> 
  <beans:prop key="mail.pop3.port">${pop3.server.port}</beans:prop> 
</util:properties>

此应用程序轮询包含应用程序文件附件的电子邮件,其中包含要处理的数据。电子邮件附件通常每天发送几次,并且相对零星。由于文件包含批量加载的数据,因此我们使用单个轮询器来配置入站POP3邮件适配器。有多个轮询器导致重复的轮询器调用拉同一个电子邮件,而另一个轮询器正在处理它。但是,使用此配置时,单个轮询器会在一段时间后挂起,而不会在日志中显示问题。请查看此配置的错误。此外,是否有另一种方法来触发电子邮件适配器(例如定期间隔的cron等)?我正在使用Spring Integration 2.1

1 个答案:

答案 0 :(得分:0)

挂起的轮询器很可能是由于用户代码卡住的线程造成的。我看到你有mail.debug = true。如果没有显示任何活动,那么挂起的线程可能就是原因。使用我们jstack进行线程转储。

是的,您可以使用表情,但这不太可能改变一切。

2.1非常陈旧,但我仍然认为悬挂线程是原因。