作用


解耦

下单后,可能需要调用库存系统、积分系统、短信系统,但这些系统和订单系统并不是强关联的,只要有一个系统调用失败整个下单就失败了。MQ可以为下单创建消息,不需要调用其他系统,让其他系统自行处理消息,实现了不同系统间的解耦。

异步

每个系统都需要一定时间,假如都让订单系统调用并等待完成后再返回结果,会导致响应时间大幅提高,且资源占用时间长,用户体验降低。使用MQ后只需要下单完成后,业务就可以直接返回,不必等待其他系统,响应时间大幅降低,用户体验好。

削峰填谷

当某时刻流量激增时,如果直接打到数据库,会导致数据库压力过大甚至宕机。此时可以将请求全部丢进MQ,下游业务再慢慢根据自身处理能力消费,保护系统不被压力压垮。

缺点

  1. 可用性降低:MQ挂了整条链路都会受到影响。
  2. 复杂度提高:需要处理消息丢失、消息重复、顺序消费等问题。
  3. 数据一致性:需要保证各服务都执行成功。

架构


  • Broker:消息中转站,负责接收、存储和转发消息。
  • Producer:负责创建消息并发送到Broker。
  • Consumer:负责从Broker拉取消息并进行业务处理。

实现


RabbitMQ

RocketMQ

Kafka

ActiveMQ