RabbitMQ_1_RabbitMQ概述

Rabbit,兔子的意思

互联网行业中的很多公司,都喜欢用动物命名产品,或者作为公司的logo,吉祥物。比如:腾讯的企鹅,美团的代数,携程的海豚......

Rabbit也是一个公司名,MQ是消息队列的意思,RabbitMQ是Rabbit企业下的一个消息队列产品。

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

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

在互联网架构中,会经常使用MQ来作为消息通信服务。接下来我们看看啥是MQ

什么是MQ

MQ(message queue),从字面意思看,本质其实是个队列,FIFO先入先出,只不过队列中存放的是消息(message)而已。消息可以非常简单,比如只包含文本的字符串,JSON等,也可以很复杂,比如内嵌对象。

MQ多用于分布式系统之间进行通信(消息传输)。

系统之间的调用通常有两种方式

1、同步通信

直接调用对方的服务,数据从一端发出后立即就可以到达另一端(消息很即时地就被处理了)。

2、异步通信

数据从另一端发出后,先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端(消息没有即时的被处理,而是在消息队列中排队等候处理)。容器的一个具体实现就是MQ(message queue)。

RabbitMQ就是MQ的一种实现。

MQ的作用

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

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

1、异步解耦

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

2、流量削峰

在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果以能处理这类峰值为标准而投入资源,无疑是巨大的浪费。使用MQ能够使关键组件支撑突发访问压力,不会因为突发流量而崩溃,比如秒杀或者促销活动,可以使用MQ来控制流量,将请求排队,然后系统根据自己的处理能力逐步处理这些请求。

3、消息分发

当多个系统需要对同一数据做出响应时,可以使用MQ进行消息分发。比如支付成功后,支付系统可以像MQ发送信息,其他系统订阅该消息,而无需轮询数据库。

4、延迟通知

在需要在特定时间后发送通知的场景中,可以使用MQ的延迟消息功能,比如在电子商务平台中,如果用户下单后一定时间内未支付,可以使用延迟队列在超是后自动取消订单。

为什么选择RabbitMQ

目前业界有很多MQ产品,例如RabbitMQ,RocketMQ,Kalfka,ZeroMQ等,也有直接使用Redis充当消息队列的案例,这些消息队列,各有侧重,也没有好坏,只有适合不适合,在实际选型时,需要结合自身需求以及MQ产品特征,综合考虑。

下面我们介绍一下当前最主流的3种MQ产品:

1、Kalfka

Kafka一开始的目的就是用于日志收集和传输,追求高吞吐量,性能卓越,单机吞吐到十万级,在日志领域比较成熟,功能较为简单,主要支持简单MQ功能,如果有日志采集需求,肯定是首选kalfka了。

2、RocketMQ

RocketMQ采用Java语言开发,由阿里巴巴开源,后捐赠给了Apache。

它在设计时借鉴了Kafka,并做出一些自己的改进,青出于蓝而胜于蓝,经过多年双十一的洗礼,在可用性、可靠性以及稳定性方面都有出色的表现,适合对于可靠性比较高,且并发比较大的场景,比如:互联网金融。但支持的客户端语言不多,且社区活跃度一般。

3、RabbitMQ

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

综合:由于RabbitMQ的综合能力较强,项目没有那么大的高并发,且RabbitMQ社区比较成熟,管理界面友好,所以咱们接下来主要学习RabbitMQ的使用。

RabbitMQ介绍

RabbitMQ官网:RabbitMQ: One broker to queue them all | RabbitMQ

RabbitMQ是采用Erlang语言实现的AMQP的消息中间件,他最初起源于金融系统领域,为了在分布式系统种存储和转发消息而设计的。

在此之前,有一些消息中间件的商业实现,比如微软的MSMQ(MicroSort Message Queue),IBM的WebSphere等,但是他们价格太贵了,一般只用于大型组织机构。

RabbitMQ开发始于2006年,是由Rabbit Technologies开发并提供商业支持的。之所以取名为Rabbit,是因为兔子行动非常迅速且繁殖起来非常疯狂。

2010年4月,Rabbit Technologies被VMware旗下的SpringSource收购,在2013年5月被并入Pivotal。

其实VMware,Pivotal本质上是一家的,不同的是,VMware是独立上市的子公司,而Pivotal是整合了EMC的某些资源,其中我们现在使用的Spring系列框架,就是Pibotal公司热门的产品之一。

直到后来Pivotal将其开源,RabbitMQ才逐渐走向大众!

RabbitMQ发展到今天,已经被越来越多的人认可,尤其是互联网公司,已经有着大规模的场景应用,这和它在易用性,扩展性,可靠性和高可用性等方面的卓越表现是分不开的,接下来我们就一起来深入了解下RabbitMQ。

相关推荐
..空空的人14 小时前
C++基于protobuf实现仿RabbitMQ消息队列---项目设计
分布式·rabbitmq
毕设源码-赖学姐14 小时前
【开题答辩全过程】以 基于Spark的电商用户行为分析系统为例,包含答辩的问题和答案
大数据·分布式·spark
我认不到你14 小时前
paxos一致性算法(大白话+图解)
分布式·后端
川2114 小时前
Kafka消息中间件(超大数据吞吐量)使用
分布式·kafka
Wang's Blog15 小时前
Kafka: 基于 NestJS 的问卷系统配置与业务实现
分布式·kafka
回家路上绕了弯15 小时前
一文读懂分布式事务:核心原理、解决方案与实践思考
分布式·后端
踏浪无痕15 小时前
JobFlow 背后:五个让我豁然开朗的设计瞬间
分布式·后端·架构
我是小妖怪,潇洒又自在15 小时前
springcloud alibaba(十)分布式事务
分布式·spring cloud·wpf
Q87622396515 小时前
基于S7 - 200 PLC和组态王的大小球颜色大小材质分拣系统探索
分布式
小满、17 小时前
RabbitMQ:Fanout、Direct、Topic 交换机、队列声明与消息转换器
java·分布式·消息队列·rabbitmq·spring amqp