2010-03-26 52 views
1

嗨,我有設計/架構問題。我想從我的一個jsp頁面發送電子郵件。我有一個問題是一個小問題。有一個例子,其中一個頁面需要在接近同一時間發送大約50封電子郵件。我希望將郵件發送到後臺線程將實際發送電子郵件的隊列中。解決這個問題的適當方法是什麼?如果你知道一個教程,示例代碼或tomcat配置是需要的,請讓我知道。Tomcat 6線程安全電子郵件隊列(javax.mail。*)

感謝,

回答

1

您的解決方案,而聲音:消息追加到內部隊列,然後讓一些後臺任務處理它們。

這裏有幾個指標,這可能是有用的:

  • 除非你想要去的分佈(在這種情況下,你應該看看JMS),使用BlockingQueue實施您的隊列。在後臺線程中,只需執行一個無限循環,然後從隊列中發送消息。這些類爲您處理潛在的併發問題。
  • 使用ServletContextListener在Web應用程序啓動和停止時設置後臺線程。

使用原始BlockingQueue的一個可能的問題是,當您的Web應用程序停止時,隊列中的所有消息都會丟失。如果這是一個嚴重的問題,那麼最簡單的方法就是爲隊列使用數據庫並使用notify()來喚醒後臺線程,後臺線程然後處理來自數據庫的所有請求。

+0

很酷謝謝你的回答。這工作像一個魅力。 – 2010-03-28 09:10:14

+0

還有一個問題,你如何訪問contextListener已經啓動的線程? – 2010-03-29 20:26:55

+0

將引用保留在靜態變量或ServletContext屬性中的隊列或線程(最好是線程)。或者,最好是,如果您使用一些像Spring這樣的IoC容器來構建您的應用程序,請讓它爲您處理注射。 – andri 2010-03-30 15:02:39