2017-08-30 30 views
0
<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春季集成郵件入站通道適配器配置爲POP3訪問和使用輪詢配置後運行一段時間後掛起

回答

0

掛起輪詢器最有可能是由於線程停留在用戶代碼中造成的。我看到你有mail.debug = true。如果沒有顯示任何活動,那麼掛起的線程可能是原因。使用我們的jstack進行線程轉儲。

是的,你可以使用冠表達式,但這不太可能改變事情。

2.1是非常古老的,但我仍然認爲掛起線程是原因。

+0

感謝您的回覆。當問題出現時,我會嘗試捕獲線程轉儲。是否有任何其他解決方案不涉及使用輪詢配置來實現相同的功能。這個應用程序是電子郵件驅動的,電子郵件的頻率並不是很高。因此,定期開始的定期工作(每小時一次)可能會奏效。唯一不利的一面是處理不及時發生。如果你能想到其他的選擇,請告訴我。 –

+0

根據我的經驗,如果輪詢停止,則表示線程停留在用戶代碼中,或者其他代碼耗盡了默認調度程序中的線程池。您通常不應該在輪詢器線程上運行長時間運行的任務;調度程序默認只有10個線程,但[可以重新配置](https://docs.spring.io/spring-integration/reference/html/configuration.html#namespace-taskscheduler)。線程轉儲將顯示任一條件。 –

相關問題