JMS(Java 消息服务)

Spring 提供了一个 JMS 集成框架,它简化了 JMS API 的使用,就像 Spring 的集成简化了 JDBC 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 的实现。它还包含 Spring 的 PlatformTransactionManager 的实现,用于 JMS(巧妙地命名为 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 约定,因此通过相应的配置,它确实支持这种情况。但是,请仅将此用于过渡场景。