JMS (Java Message Service)

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 模板类共同的设计原则是,提供帮助程序方法来执行通用操作,并且对于更复杂的使用情况,委托处理任务的主要部分给用户实现的回调接口。JMS 模板遵循相同的设计。这些类提供了多种便捷方法,用于发送消息、同步消费消息以及向用户公开 JMS 会话和消息生成器。

org.springframework.jms.support 包提供了 JMSException 转换功能。转换将已检查的 JMSException 层次结构转换为未检查异常的镜像层次结构。如果存在已检查的 jakarta.jms.JMSException 的任何提供程序特定的子类,那么此异常将包装在未检查的 UncategorizedJmsException 中。

org.springframework.jms.support.converter 包提供了一个`MessageConverter` 抽象,用于在 Java 对象和 JMS 消息之间进行转换。

org.springframework.jms.support.destination 包提供了管理 JMS 目标的各种策略,例如为存储在 JNDI 中的目标提供服务定位器。

org.springframework.jms.annotation 包提供了使用 @JmsListener 支持注释驱动监听器端的必要基础架构。

org.springframework.jms.config 包为 jms 命名空间提供了解析器实现,以及用于配置监听器容器和创建监听器端的 Java 配置支持。

最后,org.springframework.jms.connection 包提供了一个适合在独立应用程序中使用的 ConnectionFactory 实现。它还包含一个针对 JMS 的 Spring PlatformTransactionManager 实现(巧妙地命名为`JmsTransactionManager`)。这允许将 JMS 无缝集成到 Spring 的事务管理机制中,作为事务资源。

从 Spring Framework 5 开始,Spring 的 JMS 包完全支持 JMS 2.0,并要求运行时存在 JMS 2.0 API。我们建议使用与 JMS 2.0 兼容的提供程序。 如果您碰巧在系统中使用了较旧的消息代理,则可以尝试将您的现有代理生成升级到与 JMS 2.0 兼容的驱动程序。或者,您也可以尝试针对基于 JMS 1.1 的驱动程序运行,只需将 JMS 2.0 API jar 放在类路径上,但只对您的驱动程序使用与 JMS 1.1 兼容的 API。Spring 的 JMS 支持默认遵循 JMS 1.1 约定,因此通过相应的配置,它支持此类场景。但是,请仅将此视为过渡场景。