消息队列

131 阅读1分钟

一、功能

  • 削峰

与限流不同,限流是超出部分不处理,削峰是等会再处理,应对潮汐

在这里插入图片描述 链路太长,影响接口性能,对一致性要求不高的操作可以使用job异步完成 在这里插入图片描述

  • 解藕服务
  • 分布式系统的异步
  • 采集日志
  • 消息传递

二、实现

KafkaRocketMQRabbitMQActiveMQ
单机吞吐量10万级10万级万级万级
开发语言ScalaJavaErlangJava
高可用分布式架构分布式架构主从架构主从架构
性能ms级ms级us级us级
功能只支持主要MQ功能顺序消息、事物消息等功能完善并发性强、性能好、延时低成熟的社区产品、文档丰富

三、可靠性

1. 生产者丢失

生产者没有发送成功 or MQ没收到消息

  • 同步发送 不会丢失
  • 异步发送 使用回调通知 + 本地消息列表 数据库保存mq消息(同步),异步将mq发送,发送成功就更新数据库状态,失败就重试,多次失败报警

2. MQ丢失

在内存中的mq因为宕机丢失

  • Kafka
  • RocketMQ 通过同步刷盘或异步刷盘(默认)的方式,将mq写入磁盘

3. 消费者丢失

消费者拿到mq未执行时,消费者宕机

  • Kafka
  • RocketMQ 默认需要消费者ack回复,若未回复,消息会进入重试队列、死信队列

五、RocketMQ

五、引用

  1. 消息队列(mq)是什么?