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

兔子队列?RabbitMQ详解(1)

引入

首先先介绍一下什么是 RabbitMQ 的意思:Rabbit 是一个公司的名称,MQ 是 message queue (消息队列)的缩写,而 RabbitMQ 是 Rabbit 企业下的一个消息队列产品,是一个采用Erlang语言实现AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统领域,为了在分布式系统中存储和转发消息而设计的.,是当前主流的消息中间件之一。在互联网架构中,会经常使用 MQ 来作为消息消息通信服务。

AMQP,是高级消息队列协议(Advanced Message Queuing Protocol)的意思,是一个通用的应用层协议,提供统一的消息服务协议,为面向消息的中间件设计。基于此协议的客户端与消息中间件可以传递消息,并不受客户端或者中间件,开发语言等条件的限制

Message Queue

消息队列可以把它理解为数据结构中的“队列”,有先进先出的性质(FIFO),队列中存放的内容是消息(Message)。并且消息的的内容或格式也可以多种多样:JSON 数据,文本字符串等。

MQ 多用于分布式系统之间的通讯,而系统之间的调用常有两种方式:

  • 同步通讯:(下图右侧为“服务2”)直接调用对方的服务,数据从一端出发后立可以到达另一段
  • 异步通讯:数据从一段发出后,先进入一个容器(消息队列)进行临时存储,当达到某种条件的时候,这个容器再发送给另一端,而这个容器的具体实现就是 message queue(MQ)

 作用

从上图上可以看出,MQ 在整个系统调用过程中充当了一个类似于中介的作用,也就是接受和转发消息,常见解决的问题的场景有一下几种:

  • 异步解耦:有时候调用一些接口返回数据的时候,可能在查询数据库的时候话费了很长的时间才可以把数据返回,但是这样给用户的体验就很差,所以可以优化一下,就是不即使的返回结果,借助 MQ 把这些操作异步优化,比如用户注册后发送注册短信或者邮件通知,可以作为异步任务处理,从而不必等待这些操作完成后才告知用户注册成功
  • 流量削峰:如果某一时刻某个接口的 QPS 或者访问量激增的情况下,我们的服务器就可能会崩溃掉,但是我们如果因为这种并不是很常见的情况下投入成本去增加数量或者提升服务器处理能力的话是比较浪费资源的,因此我们可以使用 MQ 的关键组件来支撑突发访问量,可以通过其来控制流量,将请求排队,然后系统根据自己的处理能力逐步处理这些请求
http://www.xdnf.cn/news/5270.html

相关文章:

  • 数字化转型-4A架构之技术架构
  • Mac下Robotframework + Python3环境搭建
  • 《智能网联汽车 自动驾驶系统设计运行条件》 GB/T 45312-2025——解读
  • 无锁秒杀系统设计:基于Java的高效实现
  • 补补表面粗糙度的相关知识(一)
  • leetcode 15. 三数之和
  • Java 原生异步编程与Spring 异步编程 详解
  • 比亚迪全栈自研生态的底层逻辑
  • MySQL 索引(二)
  • 服务器mysql连接我碰到的错误
  • 高斯过程回归(GPR)原理的通俗解释
  • Spring循环依赖问题
  • 【DLF】基于语言的多模态情感分析
  • 邮件群发中如何确保图片加载速度
  • Qt开发经验 --- 避坑指南(12)
  • vue配置代理解决前端跨域的问题
  • python环境搭建和pycharm的安装配置以及使用face_recognition与cv2
  • 一键智能AI抠图,释放创意无限可能
  • 自定义类型:结构体进阶
  • CANopen转Profinet网关,AGV可以无缝地与工厂的控制系统集成
  • Js 判断浏览器cookie 是否启用
  • C/C++复习--最易懂的C语言分支与循环语句--详解
  • 卫星导航算法程序设计——单点定位测速(SPV)
  • C语言_函数hook方案
  • Java学习手册:Spring Cloud 组件详解
  • 8.3.监控与日志体系
  • LAMMPS分子动力学基于周期扰动法的黏度计算
  • Spring事务融入(REQUIRED)具体实现步骤解析
  • 使用openlayers计算两个经纬度之间的距离 ,单位有米和千米
  • 区间 DP 详解