JMS即java消息服务。在JMS中JMS消息并不同应用直接交互,而是同JMS服务器的目的地(destination)进行交互,比如点对点(P2P)或者发布/订阅(Publish/Subscribe)。发送消息的应用程序不关注接收消息的应用程序是否正常工作,接受消息的应用程序也不关注发送消息的应用程序。他们仅仅同目的地进行交互。
Spring提供了JMS服务抽象框架,以简化对JMS API的使用。同时还能屏蔽不同JMS版本间的差异性。
1.背景
JMS,是能够异步处理客户请求的开发模型。为了支持消息的异步处理,java/J2EE平台引入了JMS API。JMS支持两种消息模型:点对点和发布/订阅模式。
点对点模式的含义是:消息生产者将消息发布到Qqueue中,在随后的操作中将会有消息消费者从该Qqueue中将消息消费掉。一旦消息消费掉,Qqueue中将不再存在他,因此其他消息消费者将不能够获得已消费的消息。注意,尽管Qqueue支持同时存在多个消息消费者,但对于单个的消息而言,仅仅会有一个消息消费者消费它。
发布/订阅模式的含义:消息生产者(发布者)将消息发布到Topic中,与此同时将会有多个消息消费者(订阅者)消费发布到该Topic的消息。它与点对点不同,即发布到Topic的消息将会被所有已订阅该Topic的订阅者消费。注意,如果消息发往Topic中时,当时不存在消息监听者(即,订阅者不处于监听状态),则该消息将丢弃掉。但有一点特殊,如果某订阅者是持久订阅者,则该消息将保留到该持久订阅者消费掉该消息为止。
JMS1.0.2中定义了两种消息类型,即点对点和发布/订阅。在JMS1.1中,将两种的API合二为一为ConnectionFactory。同时,借助JMS1.0.2 API在同一Session中只能够同某类型的目的地经行交互;JMS1.1消除了这种开发限制,在同一个Session中能够同不同类型的目的地进行交互,更好的实现事务管理。
2.Spring对JMS提供的支持
JMS,能够保证客户/服务器间的可靠性,即保证消息消费者、生产者确实消费或者生产了消息。这对于企业应用而言至关重要。可靠性不仅仅需要从应用层面保证,更多的是从系统级、中间层得以保证。现在已经有一些可靠性规范来确保服务质量的可靠性。JMS的服务质量(QoS)对于这种松耦合的架构很重要。无论如何,JMS都是架构大型企业应用的主要利器之一。
对这种优秀的J2EE API,Spring提供了Spring JMS抽象服务。
2.1)JmsTemplate
在Spring框架提供的JMS抽象中,JmsTemplate同MessageCreator结合能够发送消息。开发者需要实现MessageCreator回调接口定义的createMessage方法。
通过JBoss提供的JMX控制台应用,能浏览到发送到JBossMQ的消息内容。
JmsTemplate模版在默认时,使用了P2P目的地类型,通过pubSubDomain属性能够改变目的地类型。
消息驱动Bean是接收消息的最好方式之一。JmsTemplate也支持消息的的接受操作。JmsTemplate提供的receive方法,能实现同步接收消息,通过设定receiveTimeout属性,可以指定线程阻塞的最大时间。使用receive方法接收消息时务必小心!
为了实现消息的异步接收,需要在应用中实现MessageListener接口。
JmsTemplate提供了各种send方法,供发送消息使用。其中,JmsTemplate中的convertAndSend和receiveAndConvert方法能够借助于MessageConverter接口实现将消息做相应的转换。MessageConverter接口定义了Java对象同JMS消息之间的简单约定。Spring框架的JMS抽象提供了MessageConverter的简单实现,即SimpleMessageConverter。借助于SimpleMessageConverter,开发者能够实现String与TextMessage、byte[]与BytesMessage、java.util.Map与MapMessage之间的自动转换。也可以自定义其他的MessageConverter接口实现。通过使用消息转换器,使得开发人员能更专注于业务逻辑,而不用关注JMS消息的具体内容。
默认时,如果不设置JmsTemplate的messageConverter属性,Spring会直接使用JMS抽象服务提供的org.springframework.jms.support.converter.SimpleMessageConverter。然而,为了修改消息本身的内容,用MessageConverter实现不了,需要借助于Spring提供的MessagePostProcessor接口。
2.2)事务管理:
Spring提供了JmsTransactionManager,用于管理单个JMS ConnectionFactory的事务。借助于JtaTransactionManager和具有XA能力的JMS ConnectionManager能够管理全局事务。
分享到:
相关推荐
在本篇ActiveMQ学习笔记中,我们将探讨JMS(Java Message Service)与Spring框架的集成。JMS是一种标准API,用于在分布式环境中进行异步消息传递,而Spring框架则为开发人员提供了强大的依赖注入和管理服务的能力。...
- **服务提供**:Spring 容器提供了许多服务,如事务管理、消息服务、JMS 服务和持久化服务等,方便开发者使用。 - **单例支持**:Spring 支持单例模式,开发者无需手动实现单例代码。 - **AOP 支持**:Spring 提供...
此外,Spring集成了许多其他框架和库,如Quartz定时任务、Email服务、缓存支持(如 Ehcache 和 Redis)以及消息中间件(如 JMS)。 在Spring Boot中,开发者可以快速启动Spring应用,因为它提供了一种默认配置和...
在进行企业级应用开发时,Spring的这些特性可以与Java EE规范中的其他技术无缝整合,如JPA、JMS、JTA等,进一步拓展了Spring的使用场景和能力。在不断的发展中,Spring全家桶还包含了Spring Boot、Spring Cloud等更...
《JBoss_ESB学习笔记13——第十个ESB应用Spring_AOP.doc》和《JBoss_ESB学习笔记12——第十个ESB应用Spring_helloworld.doc》涉及到Spring框架与ESB的结合,Spring AOP(面向切面编程)在ESB中的应用可以简化服务的...
尚学堂的Spring学习笔记.doc可能包含对这些特性的详细解释、实例代码以及如何在实际项目中应用的指导,对于想要深入理解Spring 3.0的开发者来说是一份宝贵的参考资料。通过阅读这份笔记,你可以系统地学习Spring 3.0...
### SpringData知识点详解 #### SpringData简介 SpringData是Spring框架下的一个重要子项目,它的主要目标是为开发者提供一种统一的方式来访问不同的数据存储系统。通过SpringData,开发者能够以一致的方式处理不同...
以上就是Spring学习笔记的初步概述,涵盖了Spring的基本架构、配置文件的创建和加载,以及依赖注入的主要方式。随着学习的深入,还可以涉及AOP、Spring MVC、Spring Boot、Spring Data等更高级的主题,从而更好地...
Spring为各种企业服务API提供了统一的抽象,如JDBC、JMS、JMX等,使得开发者无需直接与这些底层API交互,而是通过Spring的简单API来使用。这提高了代码的可读性和可维护性。 **事务管理**: Spring提供了声明式事务...
### Spring学习笔记知识点详解 #### 一、Spring理论基础 1. **依赖注入与控制反转** - **依赖注入(Dependency Injection, DI)**: 在软件工程中,依赖注入是一种设计模式,它允许对象在其生命周期中动态接收其依赖...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、用于简化企业级Java开发的框架。它通过一系列强大的特性来提高应用程序的开发效率和质量,尤其是在解决企业级开发中的常见问题如...
**JMS学习笔记** Java消息服务(Java Message Service,简称JMS)是Java平台中用于在分布式环境中交换异步消息的标准API。它提供了一种可靠的消息传递机制,使得应用程序可以在不互相依赖的情况下进行通信,从而...
《MLDN_J2EE框架_笔记--精华---(包括jsp struts hibernate spring)》这份压缩包文件聚焦于Java企业级开发中的核心技术,涵盖了JSP、Struts、Hibernate和Spring四大框架,它们是构建现代J2EE应用的基础。以下是这些...
springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...
5. **消息模块**:支持 JMS(Java Message Service)。 6. **工具模块**:提供通用的辅助类和实用工具。 7. **测试模块**:帮助测试 Spring 组件和应用。 **Spring MVC** Spring MVC 是 Spring 框架的一部分,用于...
标题中的“jms spring”指的是Java消息服务(Java Message Service)与Spring框架的集成。Java消息服务(JMS)是一个应用程序接口(API),它提供了一种标准的方式,用于在不同的应用之间发送和接收消息,特别是在...
### JBoss ESB 学习笔记知识点概览 #### 一、搭建ESB开发环境 - **工具准备**: - Eclipse-JEE 3.5:集成开发环境,支持Java EE标准,适合企业级应用程序开发。 - jbossesb-server-4.7:JBoss ESB的具体版本,为...