我找了一些意見在這裏,我建立具有的相當標準功能的Web應用程序:一個帳號通過填寫表格並提交其發送電子郵件
- 註冊。
- 收到了確認代碼的鏈接
- 電子郵件點擊鏈接以確認新帳戶並登錄
當您從您的Web應用程序發送電子郵件,它常常(通常情況下)的情況下,將有對持久層進行一些更改。例如:
- 爲您網站上的帳戶新用戶註冊 - 新用戶在數據庫中創建和電子郵件發送給他們一個確認鏈接
- 用戶分配一個錯誤或問題別人 - 問題被更新並且電子郵件通知被髮送。
如何發送這些電子郵件對於您的應用程序的成功至關重要。您如何發送郵件取決於預期收件人收到電子郵件的重要性。
我們來看看在關係到郵件服務器宕機的情況下以下四個策略,利用例如1
TRANSACTIONAL &同步 電子郵件的發送失敗,向用戶顯示一個錯誤消息說他們的帳戶無法創建。當應用程序等待連接超時時,應用程序看起來很慢並且沒有響應。該帳戶不會在數據庫中創建,因爲事務已回滾。
TRANSACTIONAL & ASYNCHRONOUS 這裏的事務定義是指將電子郵件發送到JMS隊列或將其保存在數據庫表中以供其他後臺進程拾取和發送。
用戶帳戶在數據庫中創建,電子郵件發送到一個JMS隊列稍後處理。交易成功並承諾。用戶會看到一條消息,說明他們的帳戶已創建並檢查他們的電子郵件以確認鏈接。在這種情況下,可能會由於其他錯誤而永遠不會發送電子郵件,但會告知用戶已將電子郵件發送給他們。如果必須調用應用程序支持來診斷電子郵件問題,則可能會延遲向用戶發送電子郵件。
非交易&同步 用戶在數據庫中創建,但應用程序在嘗試使用確認鏈接發送電子郵件時收到超時錯誤。用戶會看到一條錯誤消息,指出存在錯誤。當它等待連接超時時,應用程序緩慢且無響應
當郵件服務器恢復生機並且用戶嘗試再次註冊時,他們被告知他們的賬戶已經存在但尚未被確認並且被給予選項將電子郵件重新發送給他們。
非事務&異步 這和交易&異步之間的唯一區別是,如果有錯誤郵件發送給JMS隊列或保存在數據庫中,仍然是創建用戶帳戶,但電子郵件直到用戶再次嘗試註冊纔會發送。
我想知道的是其他人在這裏做了什麼?你能推薦除上面提到的4以外的其他解決方案嗎?解決這個問題的合理方法是什麼?我不想過度設計一個處理我的郵件服務器宕機的(希望)罕見情況的系統!
最簡單的做法是同步編碼,但這種方法還有其他缺陷嗎?我想我想知道是否有最佳做法,但我無法通過Google搜索找到更多信息。
好問題,但有點囉嗦海事組織。 – 2010-04-11 13:41:10
它可能是,我想我只是試圖使它很好,清晰:) – JMM 2010-04-11 13:42:18