簡體   English   中英

使用JMS或ThreadPool發送電子郵件

[英]Using JMS or ThreadPool to send email messages

我想知道:

我有一個場景。 如果用戶將產品添加到系統(我正在開發),則會有一個監聽器向用戶的客戶端發送通知,通知用戶添加的新產品。

我已經讀過這個帖子了 (看到我之前從未使用過JMSThreadPool )我想知道是否應該使用JMS或ThreadPooling。

我使用Tomcat 5.5及更高版本和JBoss 5及更高版本(取決於公司的最后手段)來部署我的Web應用程序。

如果我使用JMS,我是否使用Apache ActiveMQJBoss Messaging 它們是否兼容在兩個平台上運行(Tomcat和JBoss)?

提前致謝。

對於應用程序之間的通信,JMS是一個非常好的解決方案,尤其適用於事件和通知。 JMS允許使用所謂的異步消息發送和接收這樣的通知,由此發送方和接收方彼此不了解並且不需要同時可用。

ActiveMQ是一個使用非常廣泛的消息代理,它為Java,C / C ++,C#,Perl,PHP,Python,Ruby等提供客戶端API。 這允許將JMS與使用Java和其他語言編寫的應用程序一起使用。

我已經為很多種業務情況多次實現了JMS消息傳遞來處理事件和通知。 絕大多數時候,無論使用什么消息代理,我都推薦和/或使用了Spring JMS Spring JMS非常易於使用,非常強大且具有高度可擴展性。 Spring JMS消除了創建自己的消息生成器和消息使用者的復雜性,這可以為您節省大量時間。

要了解使用Spring JMS發送消息是多么容易,請查看我最近寫的一篇標題為使用Spring JmsTemplate發送JMS消息的博客文章。 我還在撰寫一篇關於使用Spring JMS接收消息的博客文章。

如果您還有其他問題,請與我們聯系。

布魯斯

我有一次類似的要求,我們使用了JMS。 然后主要的問題是如何處理錯誤,因為SMTP確實不是事務性的:

  1. 有些電子郵件丟失了嗎?
  2. 是否可以發送兩次電子郵件?

我們決定最好兩次發送消息,這里或多或少是我們的設計:

  1. 我們依賴於容器管理的事務,如果由於某種原因無法發送電子郵件,我們決定回滾JMS事務; 該消息將在稍后由JMS重新傳遞,並且完成了發送消息的新嘗試。

  2. 如果在發送電子郵件之后JMS消息傳遞事務失敗(例如,由於JMS出現問題),則事務將自動回滾並且稍后重新傳遞消息。 在這種情況下,電子郵件被發送兩次,因為STMP不是事務性的。

  3. 即使可以發送電子郵件(從代碼的角度來看),SMTP服務器以后仍然可能有問題。 在這種情況下,JMS已經交付和使用,因此我們無法知道哪些電子郵件已被處理以及如何手動重新發送它們。

但我們已經在使用JMS了。 我不介紹JMS只是因為主要論點是JMS是事務性的,但無論如何都不是SMTP。

我會選擇更輕的東西 - 可能使用ThreadPool - 並將狀態存儲在數據庫中以了解需要發送或已發送的電子郵件。 如果存在問題,您可以查看數據庫並做出臨時決策。

我知道這個回復已經很晚了,但我希望它對於那些尋求集成ActiveMQ和Tomcat信息的人來說仍然很有價值。

我有很多人向我求助他們已經整合ActiveMQ和Tomcat的問題所以我決定寫一些關於它的文章。 這個主題不僅包含在ActiveMQ in Action中 (參見第8章),而且還發布了一系列文章,名為ActiveMQ和Tomcat:Perfect Partners 希望人們會發現這很有幫助。

我會選擇持久的JMS(我只使用WLS JMS和Websphere MQ,所以不能比較AQ和JBoss,無論哪個提供更好的交付保證)。 此外,我會認真考慮使電子郵件引擎成為一個完全獨立的應用程序,具體取決於您對流量增長的預期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM