对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

JMS(Java 消息服务)

Spring 提供了一套JMS集成框架,简化了JMS API的使用方式,与Spring对JDBC API的集成方式类似。spring-doc.cadn.net.cn

JMS 的功能大致可分为两个方面,即消息的生产和消费。JmsTemplate 类用于消息的生产以及同步消息接收。对于类似于 Jakarta EE 中消息驱动 Bean(Message-Driven Bean)风格的异步接收,Spring 提供了多种消息监听器容器,可用于创建消息驱动 POJO(MDP)。Spring 还提供了一种声明式的方式来创建消息监听器。spring-doc.cadn.net.cn

org.springframework.jms.core 包提供了使用 JMS 的核心功能。它包含 JMS 模板类,通过处理资源的创建和释放来简化 JMS 的使用,其作用类似于 JdbcTemplate 对 JDBC 所做的那样。Spring 模板类所共有的设计原则是:提供辅助方法以执行常见操作;对于更复杂的用法,则将处理任务的核心逻辑委托给用户实现的回调接口。JMS 模板遵循相同的设计理念。这些类提供了多种便捷方法,用于发送消息、同步接收消息,以及向用户暴露 JMS 会话(session)和消息生产者(message producer)。spring-doc.cadn.net.cn

org.springframework.jms.support 包提供了 JMSException 异常转换功能。该转换将受检的 JMSException 异常层次结构转换为对应的非受检异常层次结构。如果存在任何特定于 JMS 提供商的受检 jakarta.jms.JMSException 子类,则该异常会被包装在非受检的 UncategorizedJmsException 中。spring-doc.cadn.net.cn

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

org.springframework.jms.support.destination 包提供了多种管理 JMS 目的地的策略,例如为存储在 JNDI 中的目的地提供服务定位器。spring-doc.cadn.net.cn

org.springframework.jms.annotation 包提供了必要的基础设施,通过使用 @JmsListener 注解来支持注解驱动的监听器端点。spring-doc.cadn.net.cn

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

最后,org.springframework.jms.connection 包提供了适用于独立应用程序的 ConnectionFactory 实现。该包还包含了 Spring 的 JMS PlatformTransactionManager 实现(巧妙地命名为 JmsTransactionManager)。这使得 JMS 能够作为事务性资源无缝集成到 Spring 的事务管理机制中。spring-doc.cadn.net.cn

从 Spring Framework 5 开始,Spring 的 JMS 包全面支持 JMS 2.0,并且在运行时需要 JMS 2.0 API 的存在。我们建议使用兼容 JMS 2.0 的提供者。spring-doc.cadn.net.cn

如果你的系统中恰好使用了较旧的消息代理,可以尝试为现有的代理版本升级到兼容 JMS 2.0 的驱动程序。或者,你也可以尝试使用基于 JMS 1.1 的驱动程序,只需将 JMS 2.0 API 的 jar 包放入 classpath 中,但仅使用与 JMS 1.1 兼容的 API 来调用你的驱动程序。Spring 的 JMS 支持默认遵循 JMS 1.1 的规范,因此通过相应的配置,它确实支持这种场景。不过,请仅将此方案视为过渡时期的临时措施。spring-doc.cadn.net.cn