JMS (Java 訊息服務)
Spring 提供了一個 JMS 整合框架,以類似於 Spring 對 JDBC API 整合的方式,簡化了 JMS API 的使用。
JMS 大致可以分為兩個功能領域:訊息的生產和消費。JmsTemplate
類用於訊息生產和同步訊息接收。對於類似於 Jakarta EE 的訊息驅動 Bean 風格的非同步接收,Spring 提供了許多訊息監聽容器,您可以使用它們來建立訊息驅動 POJO (MDP)。Spring 還提供了建立訊息監聽器的宣告式方式。
org.springframework.jms.core
包提供了使用 JMS 的核心功能。它包含 JMS 模板類,透過處理資源的建立和釋放來簡化 JMS 的使用,就像 JdbcTemplate
對 JDBC 所做的那樣。Spring 模板類的通用設計原則是提供輔助方法來執行常見操作,並且對於更復雜的用法,將處理任務的本質委託給使用者實現的 callback 介面。JMS 模板遵循相同的設計。這些類提供了各種便捷方法來發送訊息、同步消費訊息,並將 JMS session 和訊息生產者暴露給使用者。
org.springframework.jms.support
包提供了 JMSException
轉換功能。該轉換將受檢的 JMSException
層級轉換為對應的非受檢異常層級。如果存在任何提供商特定的受檢 jakarta.jms.JMSException
子類,該異常將被包裝在非受檢的 UncategorizedJmsException
中。
org.springframework.jms.support.converter
包提供了 MessageConverter
抽象,用於在 Java 物件和 JMS 訊息之間進行轉換。
org.springframework.jms.support.destination
包提供了管理 JMS 目的地(destination)的各種策略,例如為儲存在 JNDI 中的目的地提供服務定位器(service locator)。
org.springframework.jms.annotation
包提供了必要的基礎設施,以支援使用 @JmsListener
的註解驅動監聽器端點。
org.springframework.jms.config
包提供了 jms
名稱空間的解析器實現,以及配置監聽器容器和建立監聽器端點的 Java config 支援。
最後,org.springframework.jms.connection
包提供了適合在獨立應用程式中使用的 ConnectionFactory
實現。它還包含 Spring 的 JMS PlatformTransactionManager
的實現(巧妙地命名為 JmsTransactionManager
)。這使得 JMS 作為一個事務資源可以無縫整合到 Spring 的事務管理機制中。
從 Spring Framework 5 開始,Spring 的 JMS 包完全支援 JMS 2.0,並且在執行時需要存在 JMS 2.0 API。我們建議使用相容 JMS 2.0 的提供商。 如果您的系統恰好使用較舊的訊息 broker,您可以嘗試升級到與現有 broker 版本相容的 JMS 2.0 驅動程式。或者,您也可以嘗試使用基於 JMS 1.1 的驅動程式,只需將 JMS 2.0 API jar 放在類路徑中,但只針對您的驅動程式使用與 JMS 1.1 相容的 API。Spring 的 JMS 支援預設遵循 JMS 1.1 約定,因此透過相應的配置確實支援這種情況。但是,請僅將此視為過渡場景。 |