JMS(Java消息服务)
Spring提供了一个JMS集成框架,该框架简化了JMS API的使用,其方式与Spring对JDBC API的集成方式非常相似。
JMS大致可以分为两个功能领域,即消息的生产和消费。JmsTemplate类用于消息的生产和同步消息的接收。对于异步接收,类似于Jakarta EE的消息驱动bean风格,Spring提供了一些消息监听器容器,你可以使用这些容器来创建消息驱动的POJO(MDPs)。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.supportconverter包提供了一个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 JMS
本节描述了如何使用Spring的JMS组件。
📄️ 发送消息
JmsTemplate包含许多用于发送消息的便捷方法。有些发送方法通过使用jakarta.jms.Destination对象来指定目的地,而另一些则通过JNDI查找来使用字符串来指定目的地。不接受目的地参数的send方法会使用默认目的地。
📄️ 收到消息
这描述了如何在Spring中使用JMS接收消息。
📄️ JCA消息端点的支持
从版本2.5开始,Spring还支持基于JCA的MessageListener容器。JmsMessageEndpointManager会尝试从提供者的ResourceAdapter类名中自动确定ActivationSpec类的名称。因此,通常可以提供Spring的通用JmsActivationSpecConfig,如下例所示:
📄️ 注释驱动的监听器端点
接收异步消息的最简单方法是使用带注释的监听器端点(annotated listener endpoint)基础设施。简而言之,这种方法允许你将一个托管bean(managed bean)的方法暴露为JMS监听器端点。以下示例展示了如何使用它:
📄️ JMS命名空间支持
Spring提供了一个XML命名空间来简化JMS配置。要使用JMS命名空间元素,你需要引用JMS模式(schema),如下例所示: