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

RabbitMQ概念 与 工作原理

1. RabbitMQ简介

RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。支持集群 。

支持多种语言,理论上单台MQ服务器支持 12000+ 并发

RabbitMQ有7 种工作模式 ,分别是  "Hello World!"  ,Work queues , Publish/Subscribe ,Routing,Topics ,RPC ,Publisher Confirms

可以参考官网查阅:https://www.rabbitmq.com/getstarted.html

其中比较常用的是Work queues (工作队列) , ,Routing(路由模式)

以工作队列模式为例,如图生产者p 产生消息 ,并插入到队列中  ,消费者c1 和 消费者 c2 拿到队列中的消息 并加以处理

一些常见的名词解析:

Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。

Queue:消息队列载体,每个消息都会被投入到一个或多个队列。

Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。

Routing Key:路由关键字,exchange根据这个关键字进行消息投递。

vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。

producer:消息生产者,就是投递消息的程序。

consumer:消息消费者,就是接受消息的程序。

channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

2. 官网 和 学习资料

官网:https://www.rabbitmq.com/

各语言demo下载: https://www.rabbitmq.com/getstarted.html

服务端安装包下载:https://github.com/rabbitmq/rabbitmq-server/releases

3. 图示原理 和 使用场景

3.1 比如12306订票系统 :

12306订单系统充当 生产者, 系统产生大量的订单  

然后插入到 RabbitMQ队列中  。

右边 3台短信服务器 充当 消费者  在MQ中 队列 取得订单信息 ,给用户发 “订票成功,单号是xxxxx” 的消息。

以达到削峰填谷的目的。

3.2 再比如  Publish/Subscribe (发布订阅模式)

p (生产者)是B 站 的一个 up主  ,他发布了一条新视频

然后通过路由和一定的规则 ,插入到指定的队列中 

c1 和 c2 都是他的粉丝 ,然后他们就会收到 “某某某up主发布一个新视频”的消息

4. 为什么要使用MQ ,它有什么优缺点

某些场景 它使系统稳定性更高。

因为它具有 削峰  ,解耦  和 异步的特点 

比如 某互联网公司的系统

每天 0:00 到 12:00,A 系统风平浪静,每秒并发请求数量就 50 个。结果每次一到 12:00 ~ 13:00 ,每秒并发请求数量突然会暴增到 5k+ 条。但是系统是直接基于 MySQL 的,大量的请求涌入 MySQL,每秒钟对 MySQL 执行约 5k 条 SQL。

一般的 MySQL,扛到每秒 2k 个请求就差不多了,如果每秒请求到 5k 的话,可能就直接把 MySQL 给打死了,导致系统崩溃,用户也就没法再使用系统了。

但是高峰期一过,到了下午的时候,就成了低峰期,可能也就 1w 的用户同时在网站上操作,每秒中的请求数量可能也就 50 个请求,对整个系统几乎没有任何的压力。

如果使用 MQ,每秒 5k 个请求写入 MQ,A 系统每秒钟最多处理 2k 个请求,因为 MySQL 每秒钟最多处理 2k 个。A 系统从 MQ 中慢慢拉取请求,每秒钟就拉取 2k 个请求,不要超过自己每秒能处理的最大请求数量就 ok,这样下来,哪怕是高峰期的时候,A 系统也绝对不会挂掉。而 MQ 每秒钟 5k 个请求进来,就 2k 个请求出去,结果就导致在中午高峰期(1 个小时),可能有几十万甚至几百万的请求积压在 MQ 中。

这个短暂的高峰期积压是 ok 的,因为高峰期过了之后,每秒钟就 50 个请求进 MQ,但是 A 系统依然会按照每秒 2k 个请求的速度在处理。所以说,只要高峰期一过,A 系统就会快速将积压的消息给解决掉。

虽然接入系统后 系统复杂度高了,还有可能涉及到一致性的问题 ,但是关键时刻,用,还是得用的。

5.参考链接

官网

https://www.rabbitmq.com/

工作模式:

https://www.rabbitmq.com/getstarted.html

https://ke.qq.com/course/230866?tuin=5788c538&taid=12461388048074194

安装MQ:

https://www.cnblogs.com/jimlau/p/12029985.html

https://blog.csdn.net/nbdclw/article/details/81133454

下载地址:

https://www.rabbitmq.com/install-rpm.html

http://www.dtcms.com/a/445745.html

相关文章:

  • 力扣每日一题(一)双指针 + 状态转移dp 矩阵快速幂
  • [ Redis ] 数据结构储存系统
  • 广东网站开发推荐山东住房城乡建设厅网站首页
  • [人工智能-综述-21]:学习人工智能的路径
  • 黄冈手机网站建设网站支付宝网上支付功能怎么做
  • Oracle OCP认证考试题目详解082系列第49题
  • HarmonyOS ArkTS深度解析:从语法特性到UI开发实践
  • Oracle OCP认证考试题目详解082系列第53题
  • 第十四篇:Python异步IO编程(asyncio)核心原理解析
  • RabbitMQ的核心组件有哪些?
  • Go语言:给AI开发装上高性能引擎
  • 中国五大网站建设公司外贸网站建设模板
  • 【Qt】多线程
  • 如何把qt + opencv的库按需要拷贝到开发板
  • 网络安全设备 防火墙
  • Java学习之旅第二季-6:static关键字与this关键字
  • 高校健康驿站建设指引妖精直播
  • 违规通知功能修改说明
  • SOFA 架构--01--简介
  • 家具网站首页模板郑州销售网站
  • 如何将Spring Boot 2接口改造为MCP服务,供大模型调用!
  • DC-DC电源芯片解读:RK860
  • 从零开始的C++学习生活 3:类和对象(中)
  • 做网站的技术员包装设计概念
  • 【深度学习02】TensorBoard 基础与 torchvision 图像变换工具详解(附代码演示)
  • k8s中Pod和Node的故事(1):过滤、打分、亲和性和拓扑分布
  • springboot自助甜品网站的设计与实现(代码+数据库+LW)
  • 网站建设业动态wordpress出现404
  • Vue3组件通信8大方式详解
  • LeetCode 刷题【100. 相同的树、101. 对称二叉树、102. 二叉树的层序遍历】