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的延迟消息功能

举例:支付

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

相关推荐
goTsHgo2 小时前
HBase中的Write-Ahead Log 详解
大数据·分布式·hbase
Java指南修炼3 小时前
一个为分布式环境设计的任务调度与重试平台,高灵活高效率,系统安全便捷,分布式重试杀器!(附源码)
分布式·架构·开源·源码·项目
小笨猪-4 小时前
Redis分布式锁
数据库·redis·分布式
一棵___大树7 小时前
【中间件】—一篇说明白API网关&常用API网关推荐
分布式·中间件
weixin_531804247 小时前
消息队列(如RabbitMQ、Kafka)的使用与原理。缓存系统(如Redis、Memcached)的使用与优化。
缓存·kafka·rabbitmq
vonlinee9 小时前
RabbitMQ 集群
分布式·rabbitmq
M_灵均9 小时前
Kafka相关知识
分布式·kafka
除了代码啥也不会10 小时前
springboot 整合 rabbitMQ(1)
spring boot·rabbitmq·java-rabbitmq
小笨猪-10 小时前
RabbitMQ安装(Ubuntu环境)
分布式·rabbitmq