版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章异步消息学习目的与要求本章主要讲解了企业级消息代理JMS和AMQP。通过本章的学习,理解异步消息通信原理,掌握异步消息通信技术。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录9.1消息模型9.2企业级消息代理9.3SpringBoot的支持9.4异步消息通信实例《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
9.1消息模型异步消息主要目的是为了解决跨系统的通信。所谓异步消息即消息发送者无须等待消息接收者的处理及返回,甚至无须关心消息是否发送与接收成功。在异步消息中有两个极其重要的概念,即消息代理和目的地。当消息发送者发送消息后,消息将由消息代理管理,消息代理保证消息传递到目的地。异步消息的目的地主要有两种形式,即队列和主题。队列用于点对点式的消息通信,即端到端通信(单接收者);主题用于发布/订阅式的消息通信,即广播通信(多接收者)。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
9.1.1点对点式在点对点式的消息通信中,消息代理获得发送者发送的消息后,将消息存入一个队列里,当有消息接收者接收消息时,将从队列里取出消息传递给接收者,这时队列中清除该消息。在点对点式的消息通信中,确保的是每一条消息只有唯一的发送者和接收者,但并不能说明只有一个接收者可以从队列里接收消息。这是因为队列里有多个消息,点对点式的消息通信只保证每一条消息只有唯一的发送者和接收者。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
9.1.2发布/订阅式多接收者是消息通信中一种更加灵活的方式,而点对点式的消息通信只保证每一条消息只有唯一的接收者。这时我们可以使用发布/订阅式的消息通信解决多接收者的问题。和点对点式不同,发布/订阅式是消息发送者将消息发送到主题,而多个消息接收者监听这个主题。此时的消息发送者叫做发布者,接收者叫做订阅者。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录9.1消息模型9.2企业级消息代理9.3SpringBoot的支持9.4异步消息通信实例《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
9.2企业级消息代理异步消息传递技术常用的有:JMS和AMQP。JMS是面向基于Java的企业应用的异步消息代理。AMQP是面向所有应用的异步消息代理。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
9.2.1JMSJMS(JavaMessagingService)即Java消息服务,是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.JMS元素1)JMS消息代理实现开源的JMS实现有ApacheActiveMQArtemis、JBoss社区所研发的HornetQ、TheOpenJMSGroup的OpenJMS等等实现。2)JMS客户生产或消费基于消息的Java应用程序或对象。3)JMS生产者创建并发送消息的JMS客户。4)JMS消费者接收消息的JMS客户。5)JMS消息包括可以在JMS客户之间传递的数据对象。6)JMS队列一个容纳那些被发送的等待阅读的消息区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被阅读,该消息将被从队列中移走。7)JMS主题一种支持发送消息给多个订阅者的机制。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.JMS的应用接口《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
9.2.2AMQPAMQP(AdvancedMessageQueuingProtocol)即高级消息队列协议,是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件的不同产品、不同开发语言等条件的限制。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录9.1消息模型9.2企业级消息代理9.3SpringBoot的支持9.4异步消息通信实例《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
9.3.1JMS的自动配置SpringBoot对JMS的自动配置位于org.springframework.boot.autoconfigure.jms包下,在SpringBoot3.0中支持JMS的实现有ActiveMQArtemis(下一代ActiveMQ)。SpringBoot为我们定义了ArtemisConnectionFactoryFactory的bean作为连接,并通过以“spring.artemis”为前缀的属性配置ActiveMQArtemis的连接属性,主要包含:spring.artemis.broker-url=tcp://localhost:61616#消息代理路径spring.artemis.user=spring.artemis.password=spring.artemis.mode=另外,SpringBoot在JmsAutoConfiguration自动配置类中为我们配置了JmsTemplate;并且在JmsAnnotationDrivenConfiguration配置类中,为我们开启了注解式消息监听的支持,即自动开启@EnableJms。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
9.3.2AMQP的自动配置SpringBoot对AMQP的自动配置位于org.springframework.boot.autoconfigure.amqp包下,RabbitMQ是AMQP的主要实现。在RabbitAutoConfiguration自动配置类中,为我们配置了连接的RabbitConnectionFactoryBean和RabbitTemplate,并且在RabbitAnnotationDrivenConfiguration配置类中开启了@EnableRabbit。从RabbitProperties类中,可以看出RabbitMQ的配置可通过以“spring.rabbitmq”为前缀的属性进行配置,主要包含:spring.rabbitmq.host=localhost#RabbitMQ服务器地址,默认为localhostspring.rabbitmq.port=5672#RabbitMQ端口,默认为5672spring.rabbitmq.username=guest#默认用户名spring.rabbitmq.password=guest#默认密码《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录9.1消息模型9.2企业级消息代理9.3SpringBoot的支持9.4异步消息通信实例《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
9.4.1JMS实例本节我们使用JMS的一种实现ActiveMQArtemis讲解JMS实例。因此,需要事先安装ActiveMQArtemis(注意需要安装Java11+)。读者可访问/下载符合自己的ActiveMQArtemis。编写本书时,作者下载了apache-artemis-2.27.1-bin.zip。该版本的ActiveMQArtemis,解压缩即可完成安装。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
ActiveMQArtemis的安装解压缩后,需要创建一个代理服务器,以Windows10为例,具体步骤如下:(1)以管理员身份运行cmd,进入ActiveMQArtemis解压后的bin目录,例如执行“D:\>cdD:\soft\JavaEE\apache-artemis-2.27.1\bin”。(2)执行“artemis.cmdcreate代理所在目录”命令,例如执行“D:\soft\JavaEE\apache-artemis-2.27.1\bin>artemis.cmdcreateD:\soft\ActiveMQArtemis”。(3)输入默认用户名和密码(admin),并输入y允许匿名访问。代理服务器创建成功后,cmd信息显示如图9.2所示。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
ActiveMQArtemis的安装《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
ActiveMQArtemis的安装代理服务器创建成功后,继续执行“D:\soft\ActiveMQArtemis\bin\artemis-service.exe”install命令安装ApacheActiveMQArtemis服务,最后执行"D:\soft\ActiveMQArtemis\bin\artemis-service.exe"start命令启动ApacheActiveMQArtemis服务(也可以在系统服务中启动)。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
ActiveMQArtemis的安装然后,通过“http://localhost:8161”运行ActiveMQArtemis的管理界面,管理员账号和密码默认为admin/admin,如图9.4所示。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
使用JMS的实现ActiveMQArtemis进行两个应用系统间的点对点式通信1.创建基于SpringforApacheActiveMQArtemis的SpringBoot应用ch9_1Sender(消息发送者)2.配置ActiveMQArtemis的消息代理地址在应用ch9_1Sender的配置文件perties中,配置ActiveMQArtemis的消息代理地址:spring.artemis.broker-url=tcp://localhost:616163.定义消息在应用ch9_1Sender的com.ch.ch9_1sender包下,创建消息定义类MyMessage,该类需要实现MessageCreator接口,并重写接口方法createMessage进行消息定义。publicMessagecreateMessage(Sessionsession)throwsJMSException{
MapMessagemapm=session.createMapMessage();
ArrayList<String>arrayList=newArrayList<String>(); arrayList.add("陈恒1"); arrayList.add("陈恒2"); mapm.setString("mesg1",arrayList.toString());//只能存Java的基本对象
mapm.setString("mesg2","测试消息2");
returnmapm;}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.发送消息在应用ch9_1Sender的主类Ch91SenderApplication中,实现SpringBoot的CommandLineRunner接口,并重写run方法,用于程序启动后执行的代码。在该run方法中,使用JmsTemplate的send方法向目的地mydestination发送MyMessage的消息,也相当于在消息代理上定义了一个目的地叫mydestination。使用JMS的实现ActiveMQArtemis进行两个应用系统间的点对点式通信《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
5.创建消息接收者按照步骤1创建SpringBoot应用ch9_1Receive,该应用作为消息接收者。并按照步骤2配置ch9_1Receive的ActiveMQArtemis的消息代理地址。6.定义消息监听器接收消息在应用ch9_1Receive的com.ch.ch9_1receive包中,创建消息监听器类ReceiverMsg。在该类中使用@JmsListener注解不停地监听目的地mydestination是否有消息发送过来,如果有就获取消息。使用JMS的实现ActiveMQArtemis进行两个应用系统间的点对点式通信《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
7.运行测试我们先启动消息接收者ch9_1Receive应用,启动ch9_1Receive应用后,单击图9.4中的JMX,可看到如图9.5所示的界面。使用JMS的实现ActiveMQArtemis进行两个应用系统间的点对点式通信《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
从图9.5可以看出目的地mydestination有一个消费者,正在等待接收消息。此时,我们启动消息发送者ch9_1Sender应用后,可在接收者ch9_1Receive应用的控制台上看到有消息打印,如图9.6所示。我们再去刷新图9.5可看到如图9.7所示的界面。使用JMS的实现ActiveMQArtemis进行两个应用系统间的点对点式通信从图9.7可以看出目的地mydestination的Messagesadded有数据增加(表示发送成功),同时Messagesacknowledged有数据增加(表示接收成功)。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
9.4.2AMQP实例本节我们使用AMQP的主要实现RabbitMQ讲解AMQP实例,因此需要事先安装RabbitMQ。又因为RabbitMQ是基于erlang语言开发的,所以安装RabbitMQ之前,先下载安装erlang。erlang语言的下载地址为/downloads;RabbitMQ的下载地址为/download.html。编写本书时,下载的erlang语言版本是“otp_win64_25.2.2.exe”,下载的RabbitMQ版本是“rabbitmq-server-3.11.8.exe”。运行erlang语言安装包“otp_win64_25.2.2.exe”,一直next即可完成安装erlang。安装erlang后需要配置环境变量ERLANG_HOME以及path中新增%ERLANG_HOME%\bin。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
RabbitMQ安装运行RabbitMQ安装包“rabbitmq-server-3.11.8.exe”,一直next即可完成安装RabbitMQ。安装RabbitMQ后需要配置环境变量RABBITMQ_SERVER=安装目录\RabbitMQServer\rabbitmq_server-3.11.8以及path中新增%RABBITMQ_SERVER%\sbin《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
RabbitMQ安装在cmd命令行窗口,进入到RabbitMQ的sbin目录下,运行rabbitmq-plugins.batenablerabbitmq_management命令,打开RabbitMQ的管理组件。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
RabbitMQ安装以管理员方式打开cmd命令,运行netstartRabbitMQ命令,提示RabbitMQ服务已经启动。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
RabbitMQ安装在浏览器地址栏中,输入“http://localhost:15672”,账号和密码默认为guest/guest,进入RabbitMQ的管理界面(进不去界面时,请重启计算机服务中的RabbitMQ)。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
使用RabbitMQ实现发布/订阅式异步消息通信(天气预报发布与接收)1.创建发布者应用ch9_2Sender创建发布者应用ch9_2Sender,包括以下步骤。1)创建基于Lombok、SpringforRabbitMQ的SpringBoot应用ch9_2Sender。2)在ch9_2Sender应用的pom.xml中添加spring-boot-starter-json依赖,代码如下:<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId></dependency>3)在ch9_2Sender应用中创建名为com.ch.ch9_2sender.entity的包,并在该包中创建Weather实体类。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
使用RabbitMQ实现发布/订阅式异步消息通信(天气预报发布与接收)4)在应用ch9_2Sender的主类Ch92SenderApplication中,实现SpringBoot的CommandLineRunner接口,并重写run方法,用于程序启动后执行的代码。在该run方法中,使用RabbitTemplate的convertAndSend方法将特定的路由“weather.message”发送Weather消息对象到指定的交换机“weather-exchange”。在发布消息前,需要使用ObjectMapper将Weather对象转换成byte[]类型的JSON数据。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
使用RabbitMQ实现发布/订阅式异步消息通信(天气预报发布与接收)2.创建订阅者应用ch9_2Receiver-1创建订阅者应用ch9_2Receiver-1,包括以下步骤。1)创建基于Lombok、SpringforRabbitMQ的SpringBoot应用ch9_2Receiver-1。2)在ch9_2Receiver-1应用的pom.xml中添加spring-boot-starter-js
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026顶峰滑雪公司招聘2人备考题库附答案详解(综合卷)
- 2026云南大学附属医院面向社会招聘非事业编制工作人员51人备考题库及答案详解(夺冠)
- 2026北京一零一中教育集团矿大分校招聘备考题库附答案详解
- 2026四川德阳绵竹市第三人民医院招聘5人备考题库附答案详解(达标题)
- 2026郴州自贸建设有限公司湖北十堰户用分布式光伏项目部劳务用工招聘6人备考题库附答案详解
- 2026湖南邵阳武冈市事业单位及市属国有企业人才引进36人备考题库含答案详解(完整版)
- 关爱他人教学设计
- 践行文化使命凝聚奋进力量奋力书写新时代文博事业高质量发展新篇章
- 珠宝包装与配送管理手册
- 小学班主任班级管理与日常工作手册
- 医疗设备试用的协议书
- 认知行为疗法进阶
- DB11/T 147-2015-检查井盖结构、安全技术规范
- 河道的整治方案
- 广东省初级中学教育装备标准
- 半小时漫画股票实战法
- 中国的侍酒师
- 水利工程经济第六章-水利工程效益分析课件
- 2023北京市大兴区初一(下)期中语文试题及答案
- 刺客列传荆轲原文翻译
- 电子装联工艺技术课件
评论
0/150
提交评论