SMTP
SMTP協(xié)議的直接實現(xiàn)要求我們在標準SMTP端口(25)上安裝一個偵聽器 , 然后在調(diào)用者連接到該端口時執(zhí)行該協(xié)議指定的交互 。假如調(diào)用者不是通過中間機器而是直接連到我們的服務(wù)器上 , 那么Web服務(wù)客戶機就可以確定消息已被接收;否則它會收到一個通信錯誤 , 并可以立即對這次通信失敗采取相應(yīng)的措施 。然而 , 若服務(wù)器宕機 , 就無法再進行純異步的請求 。
由于在多個服務(wù)器間分配電子郵件負載的機制得到了廣泛的理解 , 所以可伸縮性是很輕易實現(xiàn)的 。只要這多個服務(wù)器能處理請求 , 那么任何通過服務(wù)器多個實例之間的連接的適當(dāng)路由都會成功 , 同時還提供工作負載治理和故障轉(zhuǎn)移 。
由于SMTP實現(xiàn)將偵聽每個連接在它端口上的客戶機 , 所以任何發(fā)送至服務(wù)器的電子郵件都會被處理 , 而不管目標用戶(請想一下電子郵件中的To:域)是誰 。因此 , 分派器例程能夠輕松地為各個用戶路由請求 。
POP
POP協(xié)議直到服務(wù)器上的電子郵件被請求時才釋放它們 。客戶機程序必須用顯式方法將它們刪除 。您的電子郵件程序或許被配置為檢索后刪除電子郵件 , 但根據(jù)該協(xié)議這只是對服務(wù)器的一個單獨請求 。分派器將周期性地輪詢POP服務(wù)器來檢索每封電子郵件 , 向目標Web服務(wù)發(fā)送請求 , 然后在這些請求被處理后將它們刪除 。由于沒有一個直接的機制來告訴調(diào)用者電子郵件已被接收或已經(jīng)發(fā)生了通信故障 , 因此這個過程是純異步的 。
對于純SMTP實現(xiàn)來說 , 可伸縮性的實現(xiàn)更為復(fù)雜 , 因為必須在分派器服務(wù)器之間做一些協(xié)調(diào)工作以避免一個請求的多服務(wù)情況 。
POP協(xié)議要求一個明確的用戶標識和密碼來連接和檢索電子郵件 。假如您想為許多不同的用戶標識處理請求 , 就需要向POP服務(wù)器輪詢多個用戶標識 。若服務(wù)器不僅要處理Web服務(wù)請求 , 還要處理為客戶機提供的響應(yīng)消息 , 或者要根據(jù)目標用戶標識做出不同的路由決定 , 這么做就顯得尤為重要 。
設(shè)計時的注重事項
在實現(xiàn)這樣一個框架時總是有許多注重事項 。首先 , 盡量使前兩種實現(xiàn)(POP和原始SMTP)有更多的共性很重要 。在多個地方做類似的事情是個不好的習(xí)慣 。其次 , 您應(yīng)當(dāng)盡量靈活 , 答應(yīng)部署多個能對請求起作用的對象 , 并在將請求傳送到實際的Web服務(wù)實現(xiàn)前盡可能做一下認證或其他一些檢查工作 。靈活性的另一方面是使擴展—比如為另一個協(xié)議(例如IMAP)添加支持—輕易進行 。
您還要盡量多利用其他實現(xiàn) 。為此 , 這一系列文章將實現(xiàn)在Java應(yīng)用程序服務(wù)器的Web容器內(nèi)運行的代碼 。首先 , 您在支持HTTPS協(xié)議的同時最好也支持SMTP協(xié)議 , 因此 , 將兩種實現(xiàn)放到同一個運行時內(nèi)是有意義的 。使用應(yīng)用程序服務(wù)器也使伸縮、配置、部署和運行時支持變得更加輕易 , 因為您可以利用現(xiàn)有的基礎(chǔ)設(shè)施而不必自己新創(chuàng)建什么東西 。
這種利用一部分是使用JavaMail以便能與SMTP順利交互 。JavaMail是J2EE的一部分 , 所以它將自動被包含在任何遵守J2EE的應(yīng)用程序服務(wù)器中 。
由于對任何代碼而言 , 確保無錯誤才是要害 , 所以設(shè)計時可測性很重要 , 包括實現(xiàn)幾個JUnit類來支持類的自動測試 。
您可能還想讓分派器盡可能快地處理請求 , 不要等一個請求處理完后才去處理另一個請求 , 這樣就要為每個請求啟動一個新線程 。還是為了簡單起見 , 您可以只創(chuàng)建一個新線程 , 而不必使用一個ThreadPool來使開銷達到最少 , 就象在一個業(yè)界水平的實現(xiàn)中一樣 。
兩個SOAP供給商的故事
有趣的是 , 對于一個SOAP供給商來說有多種選擇 , 并且它們都是Apache項目的一部分!
推薦閱讀
- switch日版和港版區(qū)別
- SMTP在X.25上
- 手機QQWiFi免費上網(wǎng) QQWiFi是怎么使用
- qq同步怎么轉(zhuǎn)移照片
- 平移和旋轉(zhuǎn)有什么相同點和不同點
- 太和殿屋檐上的仙人走獸分別叫什么名字
- 按鍵精靈安卓版找圖 按鍵精靈安卓版找圖使用技巧
- 蕭道成和蕭衍是什么關(guān)系
- 蘭字的寓意和象征
- Motorola KRZR K1使用感受
