消息队列 为什么需要消息队列

本文将介绍消息队列的使用场景,从而讲清楚为什么需要消息队列。

一、消息队列的适用场景

1. 异步处理

消息队列可以用于实现服务的异步处理,从而可以更快地返回结果,避免用户等待。

当然,异步线程也能够实现服务的异步处理,但消息队列通常还有可靠、支持分布式等优势。

2. 流量控制

在请求数量大、波动多的场景下,服务很容易因为处理能力不足而无法有效应对激增的流量,从而发生宕机。

为了保护服务,可以使用消息队列隔离用户与服务。用户的请求不会直接冲击到服务,而是首先由消息队列接收。随后,后端服务依据自己的处理能力异步地消息请求进行处理。

当然,这种做法也存在一定的问题:

  • 引入一个异步,将导致整条链路都要由同步改异步,增加了系统的复杂性
  • 在调用链中增加了一个环节,将增加系统的复杂性

3. 服务间解耦

微服务架构中,微服务间需要共同协作。

方案一是采用 RPC 的形式。若服务 A 中的某个行为与其它三个服务 B、C、D 相关联,则商定 3 个接口,并在服务 A 中显性调用。显然,这种形式下,服务间耦合严重、维护困难、扩展困难。

针对这个问题,可以采用消息队列来进行服务间解耦。具体来说,上游服务将消息投递到消息队列中,所有的下游服务都订阅消息队列,自行读取消息并执行相应的动作。

参考