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模板类,通过处理资源的创建和释放来简化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约定,因此通过相应的配置,它确实支持这种情况。但请仅考虑用于过渡场景。