前言
内容主要参考自《Spring源码深度解析》一书,算是读书笔记或是原书的补充。进入正文后可能会引来各种不适,毕竟阅读源码是件极其痛苦的事情。
Java消息服务 (Java Message Service,JMS) 应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间或分布式系统中发送消息进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数 MOM 提供商都对 JMS 提供支持。
Java消息服务的规范包括两种消息模式,点对点和发布者/订阅者。许多提供商支持这一通用框架。因此,程序员可以在他们的分布式软件中实现面向消息的操作,这些操作将具有不同面向消息中间件产品的可移植性。
Java消息服务支持同步和异步的消息处理,在某些场景下,异步消息是必要的,而且比同步消息操作更加便利。
I. 单独使用ActiveMQ
安装ActiveMQ
这里我是在Windows平台上安装 ActiveMQ 的。需要等上官 ,下载 apache-activemq-5.15.7-bin.zip 。下载完毕后解压至本地磁盘,运行 apache-activemq-5.15.7binwin64activemq.bat 批处理文件,ActiveMQ 就能够顺利启动了。
JMS独立使用
尽管大多数的Java消息服务的使用都会跟Spring相结合,但是,我们还是非常有必要了解消息的独立使用方法,这对于我们了解消息的实现原理以及后续的与Spring整合实现分析都非常重要。消息服务的使用除了要开启消息服务器外,还需要构建消息的发送端与接收端,发送端主要用来将包含业务逻辑的消息发送至消息服务器,而消息接收端则用于将服务器中的消息提取并进行相应的处理。
① 发送端
发送端主要用于发送消息到消息服务器,以下为发送消息测试,尝试发送 10 条消息到消息服务器,消息的内容为“测试发送消息”。
② 接收端
接收端主要用于连接消息服务器并接收服务器上的消息。
③ 测试结果
先运行发送端向消息队列中发送 10 条消息,然后运行接收端,即可打印出发送端向 my-queue 发送的 10 条消息内容。接收端总共消费了10次消息,消息队列中 my-queue 中的消息应该全部被消费完毕。
分析
从发送端与接收端的代码可以看出,整个消息的发送与接收过程非常简单,但是其中却参杂着大量的冗余代码,比如 Connection 的创建与关闭,Session 的创建与关闭等。
对于发送的流程,主要包括:
- 初始化连接工厂;
- 利用连接工厂创建一个连接;
- 使用连接建立会话 Session;
- 通过会话创建一个管理对象 Destination ,包括队列 (Queue) 或主题 (Topic);
- 使用会话 Session 和管理对象 Destination 创建消息生产者 MessageSender;
- 使用消息生产者 MessageSender 发送消息。
对于接收的流程,主要包括:
- 1-4 步与发送相同;
- 使用会话 Session 和管理对象 Destination 创建消息消费者 MessageConsumer;
- 使用消息消费者 MessageConsumer 接收消息。
很容易让我们联想到数据库JDBC的实现,在使用消息队列时都需要一系列冗余的但又必不可少的套路代码,而其中真正用于数据操作/发送消息的代码其实很简单。前 1-3 步都可以Spring帮助我们完成,包含个性化信息的步骤交给用户进行设置。
所以Spring对于 JMS 消息队列同样利用模板设计模式加上回调的方式提供了一个模板类 ,能让我们非常快捷方便地利用Spring进行消息的收发。
II. Spring整合ActiveMQ
和Spring封装JDBC一样,Spring也提供了一个模板类 来帮助我们使用 JMS。
添加依赖
主要在环境中添加上 spring-jms 和 activemq 两个依赖即可。
配置文件
Spring整合消息服务的使用也从配置文件配置开始。在 Spring 的核心配置文件中首先要注册 类型的 bean。当然, 用于连接消息服务器,是消息服务的基础,也要注册 则用于指定消息的目的地。
发送端
有了以上的配置,Spring就可以根据配置信息简化我们的工作量。Spring中使用发送消息到消息服务器,省去了冗余的 以及 等的创建与销毁过程,简化了工作量。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!