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。

相关推荐
爱琴孩28 分钟前
RabbitMQ 消息消费模式深度解析
rabbitmq·消息重复消费
rchmin1 小时前
Distro与Raft协议对比分析
分布式·cap
小辉笔记1 小时前
kafka原理总结
分布式·kafka
实战项目1 小时前
分布式协作入侵检测系统的报警信息管理
分布式
利刃大大3 小时前
【RabbitMQ】Simple模式 && 工作队列 && 发布/订阅模式 && 路由模式 && 通配符模式 && RPC模式 && 发布确认机制
rpc·消息队列·rabbitmq·队列
无心水4 小时前
【分布式利器:腾讯TSF】10、TSF故障排查与架构评审实战:Java架构师从救火到防火的生产哲学
java·人工智能·分布式·架构·限流·分布式利器·腾讯tsf
小北方城市网15 小时前
分布式锁实战指南:从选型到落地,避开 90% 的坑
java·数据库·redis·分布式·python·缓存
范桂飓17 小时前
大模型分布式训练框架 Megatron-LM
人工智能·分布式
oMcLin21 小时前
如何在Debian 11上通过配置MySQL 8.0的分布式架构,提升跨区域数据同步的效率与延迟?
分布式·mysql·debian
一条咸鱼_SaltyFish21 小时前
[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi
java·大数据·经验分享·分布式·微服务·架构·ai编程