如何有效率地使用 JMS
常見問題 > JMS > 如何有效率地使用 JMS
如何有效率地使用 JMS?
JMS 的設計旨在實現高效能。特別是,其設計目的是讓您在應用程式啟動時預先建立許多物件,然後在整個應用程式中重複使用它們。例如,最好預先建立並重複使用以下項目:
- 連線 (Connection)
- 工作階段 (Session)
- 訊息生產者 (MessageProducer)
- 訊息消費者 (MessageConsumer)
原因在於,每次建立和銷毀上述物件通常都需要與 JMS Broker 進行個別的請求和回應,以確保其正常運作。例如,建立連線、工作階段、生產者,然後發送訊息,再關閉所有項目 — 可能會導致與伺服器進行 7 次請求-回應!
請注意一個小技巧 — 您可以重複使用同一個 MessageProducer 將訊息發送到不同的目的地;只需使用 null 目的地建立它,並在 send 方法中指定目的地即可。
使用 null 目的地建立的 MessageProducer 實例是匿名生產者,因此 Broker 無法在建立這些實例時觸發生產者的通知。這表示當集區化的 MessageProducer 在使用中時,永遠不會發送生產者的通知。
將集區化與 JMS 結合使用
為了有效率地使用 JMS,我們建議您使用 Camel 來隱藏 JMS API,並將 訊息傳遞繫結到您的 Bean。
或者,嘗試使用 Spring 的 MessageListenerContainer 來取用訊息,並使用 JmsTemplate 來發送訊息 — 但請注意其陷阱
其他效能提示
另請參閱
Java 連接器架構
Java 連接器架構透過使用 JCA 資源配接器,支援 JMS 連線、工作階段和 MessageListener 的集區化、並行訊息處理、執行緒集區化以及交易和例外處理。
所有這些優點也可透過 Spring 的 MessageListenerContiner 取得,除了 XA 交易之外。如果您需要 XA 支援,則必須使用 JCA
通常 JCA 會在 J2EE 容器中透過 MDB 使用;不過,有一個基於 POJO Spring 的 JCA 容器可供您使用,它簡單輕巧,且易於嵌入 Tomcat 或任何 J2SE 應用程式中。