JMS 概要
JMS 是 SUN 公司开发的一套访问 MOM(Message-Oriented-Middleware) 消息服务中间件的标准 API
MON 提供消息接收和转发的服务 , 对消息进行缓存和持久操作 , 保证消息的安全性 ,JMS 让开发都无须了解远程过程调用的细节和网络通信协议的细节就可以通过 JMS 向 MOM 发送消息 , 借助消息我们可以松散耦合的方式集成不同的应用
JMS 异步通信
JMS 支持异步消息机制 , 消息生产者发送消息到 MOM, 消息消费者甚至可以不在线 ,MOM 会暂存消息 , 当消息消费者上后 ,MOM 会将消息发给消息消费者 , 消息生产者不必等消息消费者 , 这种异步消息机制在很多系统中是非常重要的
引用 TaskExecuter 实现消息异常传输
JMS 的两种消息类型
PTP (Point to Point) 点对点
Pub/Sub (Publish/Subscribe) 发布 / 订阅
PTP
PTP 生产的消息会放在一个队列中 , 消费者从队列中取走消息 , 消息一旦被取走 , 就会从队列中删除 , 多个观察都观察一个队列 , 但一个消息只能被一个消费都取走
Pub/Sub
用称为主题 (Topic) 的内容分层结构代替了 PTP 模型中的唯一的目的地 , 一个发布者可以将消息发布到某个主题下面 , 订阅了该主题的订阅者就可以收到这个消息 .
JMS 受管理的对象
在 JMS 之前 , 各 MOM 产品都提供了专有的 API 访问其产品 ,JMS 通过 MOM 产品为 Java 程序提供了一个发送消息接受消息的标准 , 便利的方法 , 用 JMS 写的应用可以在任何实现 JMS 标准的 MOM 产品上运行 .
各 MOM 产品实现技术和机制存在很大的差别 , 为保持 JMS 客户端的可移植性 , 实现了 JMS 接口的对象必须与 MOM 产品的专胡技术进行隔离 , 完成这项工作的机制是管理对象 .
这些 JMS 接口的对象由提供者消息系统管理员创建 , 并放置在 JNDI 的空间中 , 然后由 JMS 检索这些对象 , 通过 JMS 接口访问这些对象 ,JMS 提供者必须提供创建管理对象的方法 , 受管对象存放于 JNDI
两个重要的受管对象
ConnectionFacory 用于创建到提供者底层消息系统的连接
Destination 用于指定 JMS 客户端发送消息的目的地或接收消息的来源
JMS 程序只要知道受管对象的 JNDI 名称和 JMS 接口类型就可以了
JMS 的一些重要接口
JMS 定义了一系列的封装消息的高级接口 , 这些接口又分两个消息域
PTP 和 Pub/Sub javax.jms 包下的接口
ConnectionFactory
Connection
Destination
Session 发送消息或接收消息的单线程环境
MessageProducer
MessageConsumer
JMS 的两个版本 JMS1.1 JMS1.02
区别 :JMS1.1 将两种消息统一进行处理 , 透明地操作两种消息域
JMS1.02 区别对待两种消息域 , 针对每种消息域提供了高级接口的子接口
高级接口 PTP 域子接口 Pub/Sub 域子接口
ConnectionFactory QueueConnectionFactory TopicConnectionFactory
Connection QueueConnection TopicConnection
Destination Queue Topic
Session QueueSession TopicSession
MessageProducer QueueSender TopicPublisher
MessageConsumer QueueReceiver QueueBrowser TopicSubscriber
JSM 程序需要基本步骤
1. 通过 JNDI 查找 ConnectionFactory
2. 通过 ConnectionFactory 创建一个 Connection
3. 用 Connection 创建一个或者多个 Session
4. 通过 JNDI 查询一个或多个 Destination
5. 用 Session 和 Destination 创建对应的 MessageProducer 或 MessageConsumer
6. 启动 Conneciton
7. 发送或接收消息
JMS 消息的结构
Header Properties Body 三部分
Header 消息头部
JMSMessageID String
JMSDestination destination
JMSDeliveryMode int 消息持久化设置 Persistent
JMSTimestamp long
JMSExpiration long
JMSPriority int
JMSCorrelationID int
JMSReplyTo String
JMSType Destination 请求程序用它来指定回复消息就发送的地方 , 由
发送消息的 JMS 程序设置
JMSRedelivered String
Message 接口提供了访问 Header 的 API
Properties 消息属性
JMSX 开头的是 JMS 专用的 ,JSM_ 开头的是提供者专用的
Body 消息内容
JMS 有一种消息类型 , 通过五个接口来实现
TextMessage 字符串
ObjectMessage 实现了 Seralizable 接口的对象
MapMessage 是一个 Map
BytesMessage 消息是一个二进制数组
StreamMessage 消息是一组原始数据类型 , 这此数据按标准进行操作 , 按顺序进行填充或读取
消息的收发机制
JMS 事务
JMS 使用 Session 控制事务 , 如何需要事务可以在创建 Session 时标注需要事务
消息确认
消息确认是收到消息发送一个回执确认收到消息
三种确认方式
Session.ATUO_ACKNOWLEDGE 接收到消息自动发送这一个确认
Session.CLIENT_ACKNOWLEDGE 调用 Meeage#acknowledge() 方法 , 显示发送确认
Session.DUPS_OK_ACKNOWLEDGE 延时发送消息 , 但可能有重复接收消息的问题
消息选择 ( 消息过滤 )
选择条件可以通过 Header 和 Properties 进行匹配度设置
MessageConsumer consumer=session.createConsumer(destination,”JMSType=’car’”);
JMSType 和 color weigh 属性
“JMSType=’car’ AND color=’blue’ AND weigh>2500”
JMSCorrelationID=’12312312’ AND phone LIKE ‘12%e3’”;
Phone IS NOT NULL AND age>23
更多参考开心购的交流专区
分享到:
相关推荐
**JMS学习笔记精心总结** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准接口。它允许应用程序创建、发送、接收和读取消息,使得应用程序能够在不直接连接的情况下...
**JMS学习笔记(一)——JMS简介与ActiveMQ安装** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它为应用程序提供了一种标准的方式,用来创建、发送、接收和读取...
本文主要探讨的是消息中间件(Message-Oriented Middleware,简称MOM),特别是在Java消息服务(Java Message Service,JMS)的学习笔记。 JMS是Java平台上的一个标准API,用于在分布式环境中进行异步消息传递。它...
通过阅读**jms学习笔记.docx** 和 **JMS例子.docx**,你可以深入理解JMS的使用方式,获取实践经验。而 **JMS教程.pdf** 和 **基于XML和JMS的异构数据交换集成的研究.pdf** 则提供了理论基础和高级应用场景的讲解,有...
在本篇ActiveMQ学习笔记中,我们将探讨JMS(Java Message Service)与Spring框架的集成。JMS是一种标准API,用于在分布式环境中进行异步消息传递,而Spring框架则为开发人员提供了强大的依赖注入和管理服务的能力。...
在深入探讨JAVA学习笔记之前,我们首先理解一下JAVA这一编程语言的重要性。JAVA,由Sun Microsystems公司(现已被Oracle收购)于1995年推出,是一种面向对象的、跨平台的编程语言,以其“一次编写,到处运行”的特性...
RocketMQ学习笔记 1是关于Apache RocketMQ的学习笔记,涵盖了RocketMQ的基本概念、架构、消息模型、Producer和Consumer的基本概念、JMS规范等知识点。 1. 消息模型 在RocketMQ中,消息模型是指消息的生产、存储和...
### ActiveMQ学习笔记知识点梳理 #### 一、ActiveMQ简介 **定义:** - **ActiveMQ**是由Apache出品的一款功能强大的开源消息中间件。作为消息队列(Message Queue,简称MQ)的一种,它主要用来在分布式系统之间...
本学习笔记涵盖了JavaEE的核心技术,帮助学习者深入理解和掌握javaweb的各项技能。 1. **Servlet与JSP** - **Servlet**:Servlet是Java编写的服务器端程序,主要用于扩展服务器的功能。在JavaEE中,Servlet处理...
### JavaEE 学习笔记概览 #### 一、JavaEE 概念及发展历程 JavaEE(Java Platform, Enterprise Edition)是Sun Microsystems公司为简化企业级应用开发而提出的一套标准化平台,它提供了构建分布式系统的基本框架和...
这份"Java-J2EE全部学习笔记 培训结构的学习资料"涵盖了从基础到高级的Java编程和J2EE应用开发的知识点,对于想要深入理解Java EE技术的人来说是一份宝贵的资源。 1. **Java基础知识**:这部分可能包括Java语言的...
《软件工程师学习笔记J2EE》是一份针对Java企业级应用开发(J2EE)的详尽学习资源,对于想要深入理解和掌握J2EE技术体系的软件工程师来说,具有极高的参考价值。这份笔记不仅全面覆盖了J2EE的基础概念,还深入探讨了...
**J2EE学习笔记概述** J2EE(Java 2 Platform, Enterprise Edition)是Java平台的一个版本,专门针对企业级应用开发。它提供了一个全面的框架来构建、部署和管理多层、分布式、跨平台的企业应用程序。J2EE学习笔记...
【J2EE学习笔记概述】 J2EE,全称为Java 2 Platform, Enterprise Edition,是Java平台上用于构建企业级应用的框架。它提供了一个统一的标准和可扩展的平台,允许开发人员创建分布式、多层的企业应用程序。J2EE的...