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

1、RabbitMQ的概述笔记

一、什么是RabbitMQ

Rabbit是一个公司名.MQ(nessage queue) 消息队列的意思,RabbitMQ 是 Rabbit企业下的一个消息队列产品。

RabbitMQ 是⼀个实现了 AMQP 的 消息队列 服务,是当前主流的消息中间件之⼀.
AMQP:即Advanced MessageQueuingProtocol(高级消息队列协议),是一个通用的应用层
协议,提供统一消息服务的协议,为面向消息的中间件设计。基于此协议的客户端与消息中间
件可传递消息,并不受客户端或中间件,开发语言等条件的限制。

二、MQ是什么

MQ(Message queue) 从字面意思上看,本质是一个队列 先进先出,队列中存放的是消息(message)而已.消息可以非常简单,比如文本字符串 JSON等,也可以是很复杂的内嵌对象

MQ常常用户分布式系统之间进行通信

两种方式:

1.同步通信

数据从一段发出就立即可以到达另一端

2.异步通信

数据从一段发出,先进入一个容器中进行临时存储,当到达某种条件,在由这个容器发送给另一端

容器的一个具体实现就是MQ(message)

三、MQ的作用

MQ主要工作是接收并转发消息,在不同的应用场景下可以展现不同作用

举一个例子,可以将MQ想象成一个仓库,采购部门进货之后,把零件放入仓库中,生产部门从仓库中取出零件并加工成产品,MQ和仓库的区别是,仓库中存放的是物品,MQ中存放的是消息。仓库负责存放物品并转发物品,MQ负责存放消息和消息的转发

1、异步解耦:

在业务流程中,一些操作可能非常耗时,但并不需要即时返回结果.可以借助MQ把这些操作异步化,比如用户注册后发送注册短信或邮件通知,可以作为异步任务处理,而不必等待这些操作
完成后才通知用户注册成功。

2、流量削峰

当面对访问量突然激增的情况时,确保应用程序依然能够稳定运行是至关重要的。然而,如果为了应对这种不常见的流量峰值而配置充足的资源,则可能导致资源的极大浪费。使用消息队列(Message Queue, MQ)是一个有效的解决方案,它可以帮助关键系统组件承受突发的访问压力,避免因瞬间高流量导致的系统崩溃。例如,在进行秒杀活动或促销推广时,可以通过MQ来管理涌入的请求。具体来说,MQ可以将这些请求加入队列中,而不是直接对后端系统造成冲击。系统随后依据自身的处理能力,逐步处理这些排队的请求。这种方法不仅保护了系统免受瞬时高负载的影响,还使得资源利用更加高效合理。

3、消息分发

当多个系统需要对同一数据进行响应时,采用消息队列(Message Queue, MQ)来进行消息分发是一个理想的选择。例如,在支付成功后,支付系统可以将这一事件作为消息发送到消息队列中。其他相关的系统则订阅这个消息队列,一旦有新的消息到达,这些系统就能立即得到通知并作出相应的处理。这种方式避免了各个系统通过定时轮询数据库的方式来检查是否有更新,从而减少了数据库的压力和系统的复杂性。

4、延迟通知

在需要于特定时间后发送通知的场景中,利用消息队列(Message Queue, MQ)的延迟消息功能是一种非常有效的解决方案。例如,在电子商务平台中,如果用户下单之后在一定时间内没有完成支付,系统可以使用MQ的延迟队列功能来设置一个自动取消订单的任务。

四、主流的MQ

1. Kafka

Apache Kafka 最初由LinkedIn开发,并于2011年开源。它的设计初衷确实是为了处理大规模的日志数据传输问题,但是它的应用范围远远超出了日志收集。Kafka是一个分布式的流处理平台,它能够提供高吞吐量、可持久化的消息队列服务。它不仅支持传统的发布/订阅模式的消息传递,还提供了复杂的流处理功能。

2.RabbitMQ

采用Erlang语言开发,MQ功能比较完备,且几乎支持所有主流语言,开源提供的界面也非常友好,性 能较好,吞吐量能达到万级,社区活跃度也比较高,比较适合中小型公司,数据量没那么大,且并发没 那么高的场景.

http://www.xdnf.cn/news/1882.html

相关文章:

  • Linux-06 ubuntu 系统截图软件使用简单记录
  • 百度Create2025 AI开发者大会:模型与应用的未来已来
  • 数智飞轮:AI时代企业增长的核心密码
  • 《免费开放”双刃剑:字节跳动Coze如何撬动AI生态霸权与暗涌危机?》
  • 最火向量数据库Milvus安装使用一条龙!
  • 2025 Java 开发避坑指南:如何避免踩依赖管理的坑?
  • 【C语言练习】003. 声明不同数据类型的变量并赋值
  • 不同ECU(MCU/ZCU/CCU)其部署(实现)的功能存在差异
  • 吞吐量,响应速率,占用内存大小是什么,用你自己的理解说一下
  • 基于51单片机的超声波液位测量与控制系统
  • 【AI】[特殊字符]生产规模的向量数据库 Pinecone 使用指南
  • Linux安全模块:SELinux与AppArmor深度解析
  • BeeWorks Meet:私有化部署视频会议的高效选择
  • JAVA---面向对象(下)
  • toCharArray作用
  • P19:Inception v1算法实战与解析
  • Python 虚拟环境管理:venv 与 conda 的选择与配置
  • Arm GICv3中断处理模型解析
  • 大模型应用开发(PAFR)
  • 使用 uv 工具快速创建 MCP 服务(Trae 配置并调用 MCP 服务)
  • 晶振老化:不可忽视的隐患与预防策略
  • Linux的多进程开发与信号处理
  • Windows 10 上运行 Ollama 时遇到 llama runner process has terminated: exit status 2
  • 金仓数据库 KingbaseES 产品深度优化提案:迈向卓越的全面升级
  • GIS开发笔记(15)基于osg和osgearth实现三维地图上添加路网数据(矢量shp)
  • Node.js神器rimraf:10倍速删除node_modules的跨平台解决方案
  • 资源获取:项目成功的关键要素
  • Android WindowManagerService(WMS)框架深度解析
  • Python命名参数的使用
  • 从『玩意儿』代码综观『解决问题』的方案设计逻辑——开放/细致/『明理』(DeepSeek)