RabbitMQ概述

什么是MQ

MQ (message queue)消息队列

MQ从字⾯意思上看,本质是个队列,FIFO先⼊先出,只不过队列中存放的内容是消息(message).消息可以⾮常简单,⽐如只包含⽂本字符串,JSON等,也可以很复杂,⽐如内嵌对象

RabbitMQ是MQ的一种实现,是Rabbit 企业下的⼀个消息队列产品

RabbitMQ采⽤Erlang语⾔开发,MQ功能⽐较完备,且⼏乎⽀持所有主流语⾔,开源提供的界⾯也⾮常友好,性 能较好,吞吐量能达到万级,社区活跃度也⽐较⾼,⽐较适合中⼩型公司,数据量没那么⼤,且并发没那么⾼的场景.

RabbitMQ是一个实现AMQP的消息队列服务,是当前主流的消息中间件之一

AMQP,即AdvancedMessageQueuingProtocol(⾼级消息队列协议),是⼀个通⽤的应⽤层协议,提供统⼀消息服务的协议,为⾯向消息的中间件设计。

基于此协议的客⼾端与消息中间件可传递消息,并不受客⼾端或中间件,开发语⾔等条件的限制。


通信

MQ通常用于分布式系统之间进⾏通信

系统之间的调⽤通常有两种⽅式:

1.同步通信

直接调⽤对⽅的服务,数据从⼀端发出后⽴即就可以达到另⼀端.

2.异步通信

数据从⼀端发出后,先进⼊⼀个容器进⾏临时存储,当达到某种条件后,再由这个容器发送给另⼀端.

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

\

比如: 打客服电话

1.客服直接响应

2.客服记录下来,等过一段时间后进行回复

MQ的作用

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

MQ类似于一个仓库,采购部⻔进货之后,把零件放进仓库⾥,⽣产部⻔从仓库中取出零件,并加 ⼯成产品.

MQ和仓库的区别是,仓库⾥放的是物品,MQ⾥放的是消息,仓库负责存储物品,并转发物品, MQ负责存储和转发消息

1. 异步解耦

在业务流程中,⼀些操作可能⾮常耗时,但并不需要即时返回结果.可以借助MQ把这些操作异步化

举例:用户注册

⽤⼾注册完后发送邮件通知,可以作为异步任务处理,⽽不必等待插入数据库等操作完成后才告知⽤⼾注册成功

2. 流量削峰

在访问量剧增的情况下,应⽤仍然需要继续发挥作⽤,但是这样的突发流量并不常⻅.如果以能处理这类峰值为标准⽽投⼊资源,⽆疑是巨⼤的浪费.使⽤MQ能够使关键组件⽀撑突发访问压⼒,不会因为突发流量⽽崩溃

举例:大促

双十一时,用户请求很多,可以使⽤MQ来控制流量,将请求排队,然后系 统根据⾃⼰的处理能⼒逐步处理这些请求.

3. 消息分发

当多个系统需要对同⼀数据做出响应时,可以使⽤MQ进⾏消息分发

举例:支付系统

⽀付成功后,⽀付系统可以向商家,向平台财务部门等都发送通知

4. 延迟通知

在需要在特定时间后发送通知的场景中,可以使⽤MQ的延迟消息功能

举例:支付

⽤⼾下单后⼀定时间内未⽀付,可以使⽤延迟队列在超时后⾃动取消订单

相关推荐
初次攀爬者6 分钟前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
初次攀爬者2 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
让我上个超影吧3 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖3 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
断手当码农3 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
初次攀爬者3 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端
业精于勤_荒于稀3 天前
物流订单系统99.99%可用性全链路容灾体系落地操作手册
分布式
Ronin3053 天前
信道管理模块和异步线程模块
开发语言·c++·rabbitmq·异步线程·信道管理
Asher05093 天前
Hadoop核心技术与实战指南
大数据·hadoop·分布式
凉凉的知识库3 天前
Go中的零值与空值,你搞懂了么?
分布式·面试·go