RabbitMQ系列

关于RabbitMQ,感觉可以说的地方太多太多了。所以突然觉得还是写成一个系列的文档说明。主要还是自己对队列的一些理解。说到RabbitMQ,首先就要说起,什么是消息队列,还有我们为什么需要使用消息队列,即消息队列的应用场景。

消息队列(Message Queue,简称 MQ)
在计算机科学中,消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列互交。消息会保存在队列中,直到接收者取回它。
– 维基百科
以上是维基百科的说明,更多需要了解说明的我觉得可以自行谷歌,百度。我觉得这边只需要理解三个词就足够了, 消息发送者、队列、接受者。

在此顺便说明下同步与异步,我觉得同步和异步就是我告诉你一件事你立即回应我,这就是同步。而相对应我告诉你一件事你说等会你给我个地址我待会找你回答你。这就是异步。

应用场景 – 为什么需要使用消息队列
异步处理
场景说明:用户邮件注册流程
传统方式:

用户 -> 用户注册 -> 注册信息写入数据库(50ms) -> 发送注册邮件(50ms)
<- 响应返回用户结果(100ms)

消息队列:
用户 -> 用户注册 -> 注册信息写入数据库(50ms) -> 写入消息队列(5ms) <- 发送注册邮件
<- 响应返回用户结果(55ms)

使用消息队列,可以提高系统的吞吐量和更快速的响应返回给用户,这也是异步的优势。

应用解耦
场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口

传统模式的缺点:

1、假如库存系统无法访问,则订单减库存将失败,从而导致订单失败;

2、订单系统与库存系统耦合;

订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。

库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。

假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦。

减少流量
减少流量也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。

应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。
1、可以控制活动的人数;

2、可以缓解短时间内高流量压垮应用;

3、用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面;

4、秒杀业务根据消息队列中的请求信息,再做后续处理。

日志处理
日志处理是指将消息队列用在日志处理中,可以解决大量日志传输的问题。架构简化如下:

1、日志采集客户端,负责日志数据采集,定时写受写入队列;

2、消息队列,负责日志数据的接收,存储和转发;

3、日志处理应用:订阅并消费队列中的日志数据;

消息队列优缺点
优点:
应用解耦:分布式部署,只需要保证消息格式本身,不需要考虑发送者和接受者的平台本身。在多消费者的情况下, 发送者也不需要关注消费者的任何信息

异步调用:发送者异步发送消息, 不需要等待消息确认,不会对发送者本身产生响应速度的影响。

扩展性:集群部署消息队列, 当流量增大和减小是可以通过调整部署来实现,和发送方, 消费方无关。

消息可靠性

当消费者发生故障时, 消息可以被有效保存下来, 等待恢复后继续访问。而且当消息进程一部分失效或故障时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

缺点:
增加业务功能环节,需要考虑消息队列的可用性。避免消息无法正常传达数据丢失的情况。

第一篇就先这样了。第二篇开始介绍RabbitMQ。
关键字: 队列 同步 异步 分布式 异步消息 应用解耦

参考资料
大型网站架构系列:消息队列

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值