消息傳遞是每個Java應用程序的關鍵方面,尤其是對于涉及企業應用程序集成(EAI)或關注點分離的應用程序,例如多層WEB應用程序。
消息傳遞可以分為兩個主要類別,即同步和異步。 另一方面,使用同步消息傳遞時,對話的發起者等待重播每個提交的請求,而在異步消息傳遞中,發起者對重播不感興趣。 Java進程以同步方式進行通信的最常見,最有效的方法是通過遠程方法調用(RMI)。 異步通信主要使用Java Messaging Service(JMS)實現。
這篇文章提出了一種設計模式,涉及低延遲和高吞吐量應用程序的Java進程之間的異步通信。
如上所述,JMS被認為是異步應用程序消息傳遞的“事實”標準。 但是,由于涉及消息交換生命周期的內部檢查和過程(即使對于內存代理),JMS也會導致延遲顯著增加。 我們處理異步消息傳遞以實現低延遲和高吞吐量的首選方法是:
- 如果持久性是強制性的,那么最好的方法是使用JMS持久性隊列或主題
- 如果持久性不是強制性的,那么您應該實現異步消息傳遞,如下所示:
- 消息容器應該是一個List(最好是ArrayList實現)或Map(最好是HashMap實現)
- 發件人進程應使用同步塊執行同步訪問,以將消息插入容器
- 實現一個接收器進程池,該池使用同步塊同步訪問消息容器并收回消息
- 消息可以以多種方式實現,我們的首選方法是實現Externalizable接口的Plain Old Java Object(POJO),以便手動處理序列化過程。
翻譯自: https://www.javacodegeeks.com/2010/05/messaging-principals-in-java.html