第20章JMS

优质
小牛编辑
126浏览
2023-12-01

第 20 章 JMS

目录

20.1. 简介
20.2. 使用Spring JMS
20.2.1. JmsTemplate
20.2.2. 连接工厂
20.2.3. (消息)目的地管理
20.2.4. 消息侦听容器
20.2.5. 事务管理
20.3. 发送一条消息
20.3.1. 使用消息转换器
20.3.2. SessionCallbackProducerCallback
20.4. 接收消息
20.4.1. 同步接收
20.4.2. 异步接收 - 消息驱动的POJOs
20.4.3. SessionAwareMessageListener 接口
20.4.4. MessageListenerAdapter
20.4.5. 事务中的多方参与

20.1. 简介

Spring提供了一个用于简化JMS API使用的抽象框架,并且对用户屏蔽了JMS API中1.0.2和1.1版本的差异。

JMS的功能大致上分为两块,叫做消息制造和消息消耗。JmsTemplate用于制造消息和同步消息接收。和Java EE的事件驱动bean风格类似,对于异步接收消息,Spring提供了一些消息侦听容器来创建消息驱动的POJO(MDP)。

消息域的统一

JMS规范有两个主要的版本,1.0.2和1.1。

JMS1.0.2定义了两种消息域,点对点(队列)和发布/订阅(主题)。JMS 1.0.2的API为每个消息域提供了一个平行的类层次结构。导致客户端应用只能使用特定消息域的JMS API。JMS 1.1引进了统一消息域的概念使这两种消息域之间功能和客户端API的差别尽可能小。举个已消除的功能差异的例子,如果你使用的是JMS 1.1的消息供应者,你可以使用同一个Session事务性地在一个域消耗了一个消息后并且在另一个域中产生一个消息。

JMS 1.1的规范发布于2002年4月,并且在2003年11月成为J2EE 1.4的一个组成部分,结果,现在大多数使用的应用服务器只支持JMS 1.0.2的规范.

org.springframework.jms.core包提供使用JMS的核心功能。 就象为JDBC提供的JdbcTemplate一样,它提供了JMS模板类来处理资源的创建和释放以简化JMS的使用。Spring模板类的公共设计原则就是通过提供助手方法去执行公共的操作,并将实际的处理任务委派到用户实现的回调接口上,从而完成更复杂的操作。 JMS模板也遵循这样的设计原则。这些类提供众多便利的方法来发送消息、同步接收消息、 使用户可以接触到JMS session和消息产生者。

org.springframework.jms.support包提供JMSException的转换功能。它将受控的 JMSException异常层次转换到一个对应的非受控异常层次。任何受控javax.jms.JMSException异常的子类都被包装在非受控UncategorizedJmsException异常里。

org.springframework.jms.support.converter 包提供一个MessageConverter用来抽象Java对象和JMS消息之间的转换操作。

org.springframework.jms.support.destination为管理JMS目的地提供多种策略,例如为存储在JNDI中的目的地提供一个服务定位器。

最后,org.springframework.jms.connection包提供一个适合在独立应用中使用的 ConnectionFactory的实现。它还为JMS提供了一个Spring的PlatformTransactionManager的实现(现在叫做JmsTransactionManager)。 这样可以把JMS作为一个事务资源无缝地集成到Spring的事务管理机制中去。