当前位置: 首页 > news >正文

TYUT-企业级开发教程-第8章

消息服务

发送消息的组件通常称为消息生产者,使用发送过来的数据的组件称为消息消费者,消息生产者
与消息消费者之间并不是直接相连,而是通过一个共同的消息收发服务连接起来,消息生产者和消息消费者双方无须相互了解消息服务的实现细节,只需了解交换消息的格式即可

 四大消息队列的对比

ActiveMQ 是采用 Java 语言编写的完全基于 Java 消息服务( Java Message Service , JMS )规范的 面 向 消 息 的 中 间 件 , 它 为 应 用 程 序 提 供 高 效 、 可 扩 展 的 、 稳 定 的 、 安 全 的 企 业 级 消 息 通信。  ActiveMQ 性能相对较弱,在如今的高并发、大数据处理的场景下显得力不从心,经常会出现一些问题,例如消息延迟、堆积、堵塞等

RabbitMQ 是 使 用 Erlang 语 言 开 发 的 开 源 消 息 队 列 系 统 , 支 持 高 级 消 息 队 列 协 议  AMQP, 可 扩 展 通 讯 和 表 示 协 议  AMQP 是应对大规模并发活动提供统一消息服务的应用层标准高级消息队列协议,专为面向消息的中间件设计 

Kafka 是它是一种采用 Scala 和 Java 语言编写的高吞吐量分布式发布订阅消息系统,提供了快速的、可扩展的、分布式的、分区的和可复制的日志订阅服务,其主要特点是追求高吞吐量,适用于会产生大量数据的互联网服务的数据收集业务 

RocketMQ 使用纯 Java 语言编写,具有高吞吐量、高可用性、适合大规模分布式系统应用的特
点。 RocketMQ 的思路起源于 Kafka ,对消息的可靠传输和事务性做了优化,目前被广泛应用于交易、充值、流计算、消息推送、日志流式处理场景 

重要是看rabbitmq 

使用消息队列的好处


消息队列在**应用解耦、异步提速、流量削峰、分布式事务管理**方面的核心好处如下:  ### **1. 应用解耦**  
- **松耦合架构**:服务间通过消息通信,无需直接依赖,新增/修改功能不影响上下游。  
- **故障隔离**:某服务异常时,消息暂存队列,避免级联崩溃。  ### **2. 异步提速**  
- **缩短主流程耗时**:非核心操作(如发邮件、写日志)异步处理,接口响应从秒级降至毫秒级。  
- **提升吞吐量**:并行处理异步任务,释放线程资源。  ### **3. 流量削峰**  
- **缓冲突发流量**:秒杀、大促等场景下,队列暂存请求,平滑下游压力,避免系统过载。  
- **保护底层资源**:防止数据库/缓存被瞬时流量击穿。  ### **4. 分布式事务管理**  
- **最终一致性**:通过消息重试、事务消息等机制,协调跨服务操作(如“下单-扣库存”),确保数据一致。  
- **降低实现复杂度**:替代传统强一致性方案(如数据库事务),适应分布式架构。

RabbitMQ 

 RabbitMQ 是基于 AMQP 标准,使用 Erlang 语言开发的消息中间件

内容

 

Connection :代表客户端(包括消息生产者和消息消费者)与 RabbitMQ 之间的连接。
 Channel :消息通道,位于连接内部,负责实际的通信。在客户端的每个连接里,可建立多个
Channel 。
 Broker :表示消息队列服务器实体, Broker 会维护从消息生产者到消息消费者的路线,保证数据
能按照指定的方式进行传输。
 Virtual Host :虚拟主机,包含交换机、消息队列等对象。
 Exchange :交换机,用于接收消息生产者发送的消息,并根据分发规则将这些消息路由给服务器中
的队列。
 Queue :队列,是消息的载体,每个消息都会被投到一个或多个队列中,等待消息消费者连接到这
个队列将其取走。
 Binding :交换机和消息队列之间的虚拟连接

 消息是如何代理的?

① 消息生产者(发送消息的程序)和消息队列服务器实体建立连接后,向指定的虚拟主机发送消息。
② 虚拟主机内部的交换机接收消息生产者发送过来的消息,并将消息传递并存储到与之绑定的消息队列中。
③ 消息消费者(等待接收消息的程序)通过网络连接与消息队列服务器实体建立连接,在连接内部使用消息通道进行消息的最终消费。

 模式

简单模式 一对一

 不申明交换机,只需定义一个队列,消息生产者会将消息交给默认的交换机,默认的交换机会将消息绑定到消息生产者所对应的队列,消息消费者监听队列,有消息时,消费者执行。

 工作队列模式 一对多,一个生产者,多个消费者,还是不需要申明交换机

Work Queues 模式即工作队列模式,在 Work Queues 模式中,同样不需要设置交换机, RabbitMQ会使用内部默认交换机进行消息转换,只需要指定唯一的消息队列进行消息传递。
Work Queues 模式和简单模式的主要区别在于, Work Queues 模式可以有多个消息消费者。在这种模式下,多个消息消费者通过轮询的方式依次接收消息队列中存储的消息,一旦消息被某一个消息消费者接收,消息队列会将消息移除,而接收并处理消息的消费者必须在消费完一条消息后再准备接收下一条消息。

 

 

 发布 / 订阅模式 一对多,需要申明交换机

在 Publish/Subscribe 模式中,必须先显式配置一个fanout 类型的交换机,消息生产者将消息发送到交换机,同时会将消息路由到每一个消息队列上,然后每个消息队列都可以对相同的消息进行接收和存储,进而由各自消息队列关联的消费者进行消费。
 

 路由模式 有选择去传输消息

Routing 模式即路由模式,在 Routing 模式中,必须先配置一个 direct 类型的交换机,并指定一个
Routing Key 。队列与交换机的绑定也需要指定一个 Routing Key ,发送消息时交换机不再把消息交给每一个绑定的队列,而是根据消息的 Routing Key 进行判断,只有队列的 Routing Key 与消息的Routing Key 完全一致时,才会接收到消息,最后由消息消费者进行消费。

 

了解这四种即可

 第八章题目

一、填空题
1.MQ是一种能实现   生产者  到消费者单向通信的通信模型。 
2.消息队列中,Connection     用于客户端与RabbitMQ之间的连接。
3.在RabbitMQ的Publish/Subscribe模式中,必须先显式配置一个 fanout   类型的交换机。 
4.RabbitMQ服务端口号默认为    5672 。 
5.Spring框架提供的 @RabbitListener    注解可以监听RabbitMQ中指定的队列。 

二、判断题
1.RabbitMQ支持的协议有AMQP。 ( 对)
2.RabbitMQ中,一个Broker里只能有一个Virtual Host。  (错 )
3.RabbitMQ的简单模式不用声明交换机,只需要定义一个队列。  ( 对)

解析:有默认的交换机
4.安装RabbitMQ之前需要先安装Erlang语言包。  ( 对)
5.RabbitTemplate进行消息发送过程中默认使用SimpleMessageConverter转换器进行消息转换存储。  (对 )

三、选择题
1.下列选项中,关于RabbitMQ的描述正确的是(C)。
A.一种分布式数据库。
B. 一种集群管理工具。
C. 一种消息队列中间件。
D.一种Java安全框架。
2.下列选项中,消息队列中消息的载体是(D)。 
A.Channel  B.Broker  C.Exchange  D.Queue
3.下列选项中,关于消息队列中Exchange组件描述正确的是(B)。 
A.消息通道,位于连接内部,负责实际的通信。
B.交换机,用来接收生产者发送的消息,并根据分发规则将这些消息路由给服务器中的队列
C.交换机和消息队列之间的虚拟连接。
D.消息队列服务器实体。
4.下列选项中,关于RabbitMQ的模式的描述错误的是(B)。 
A.RabbitMQ的简单模式中,消息生产者会将消息交给默认的交换机。
B.Work Queues模式只能有一个消息消费者。
C.Routing模式需要指定一个Routing Key。
D.Topics工作模式适用于根据不同需求动态传递处理业务的场合。
5.下列选项中,Spring提供的用于管理Exchange、Queue、Binding的类是(A)。 
A.AmqpAdmin  B.RabbitTemplate  C.Queue  D.Binding

相关文章:

  • 基于规则引擎与机器学习的智能Web应用防火墙设计与实现
  • 【数据库课程设计】网上投票管理系统
  • 【Linux】进程间通信(三):命名管道
  • PyTorch进阶实战指南:01自定义神经网络组件开发
  • JavaScript 性能优化:调优策略与工具使用
  • Java转Go日记(四十四):Sql构建
  • 深入解析 HTTP 中的 GET 请求与 POST 请求​
  • Android Framework学习七:Handler、Looper、Message
  • 【DCGMI专题1】---DCGMI 在 Ubuntu 22.04 上的深度安装指南与原理分析(含架构图解)
  • 谷歌宣布推出 Android 的新安全功能,以防止诈骗和盗窃
  • Opencv常见学习链接(待分类补充)
  • 企业级物理服务器选型指南 - 网络架构优化篇
  • 【小明剑魔视频Viggle AI模仿的核心算法组成】
  • 什么是Rootfs
  • Python的蚁群优化算法实现与多维函数优化实战
  • 雷军:芯片,手机,平板,SUV一起发
  • Java 06API时间类
  • Backend - Oracle SQL
  • Sql刷题日志(day9)
  • Ansible模块——管理100台Linux的最佳实践
  • 国台办:不管台湾地区领导人讲什么,都改变不了台湾是中国一部分的地位和事实
  • 凤阳文旅局长回应鼓楼瓦片脱落:楼宇是否属于文物?施工经费用在何处?
  • 全国35城居民对公共服务满意度“打分”,上海多项指标居首
  • 陕西籍青年作家卜文哲爬山时发生意外离世,终年28岁
  • 热点问答:特朗普与俄乌总统分别通话,他们谈了什么
  • 国家发改委:城市更新项目必须建立多元化多层级资金投入机制