目录

消息存储消息存储方式非持久化

rocketmq消息存储图解 RocketMQ原理消息存储(1)

  1. 消息生成者发送消息到 MQ
  2. MQ 返回 ACK(Acknowledge Character)给生产者
  3. MQ push 消息给对应的消费者
  4. 消息消费者返回 ACK 给 MQ
持久化

rocketmq消息存储图解 RocketMQ原理消息存储(2)

  1. 消息生成者发送消息到 MQ
  2. MQ 收到消息,将消息进行持久化,存储该消息
  3. MQ 返回 ACK 给生产者
  4. MQ push 消息给对应的消费者
  5. 消息消费者返回 ACK 给 MQ
  6. MQ 删除消息

注意:

①第 5 步 MQ 在指定时间内接到消息消费者返回 ACK,MQ 认定消息消费成功,执行 6 。

②第 5 步 MQ 在指定时间内未接到消息消费者返回 ACK,MQ 认定消息消费失败,重新执行 4、5、6 。

消息存储介质

rocketmq消息存储图解 RocketMQ原理消息存储(3)

数据库文件系统消息存储与读写方式SSD(Solid State Disk):固态硬盘Linux 系统发送数据的方式

rocketmq消息存储图解 RocketMQ原理消息存储(4)

消息存储结构

rocketmq消息存储图解 RocketMQ原理消息存储(5)

如图所示,MQ 数据存储区域包含如下内容:

刷盘机制同步刷盘

rocketmq消息存储图解 RocketMQ原理消息存储(6)

  1. 生产者发送消息到 MQ,MQ 接到消息数据
  2. MQ 挂起生产者发送消息的线程
  3. MQ 将消息数据写入内存
  4. 内存数据写入硬盘
  5. 磁盘存储后返回 SUCCESS
  6. MQ 恢复挂起的生产者线程
  7. 发送 ACK 到生产者
异步刷盘

rocketmq消息存储图解 RocketMQ原理消息存储(7)

  1. 生产者发送消息到 MQ,MQ 接到消息数据
  2. MQ 将消息数据写入内存
  3. 发送 ACK 到生产者
小结

# 刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=SYNC_FLUSH

高可用高可用实现nameserver消息服务器消息生产消息消费主从复制同步复制:异步复制:配置方式:

#Broker 的角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole=SYNC_MASTER

负载均衡Producer 负载均衡:Consumer 两种负载均衡策略:消息重试

当消息消费后未正常返回消费成功的信息将启动消息重试机制

两种消息重试机制:

顺序消息重试

rocketmq消息存储图解 RocketMQ原理消息存储(8)

无序消息重试

rocketmq消息存储图解 RocketMQ原理消息存储(9)

死信队列概念:死信队列的特征:死信队列中的消息的特征:死信处理:消息幂等消息重复消费消息重复消费原因:

rocketmq消息存储图解 RocketMQ原理消息存储(10)

消息幂等对同一条消息,无论消费多少次,结果保持一致,称为消息幂等性。解决方案:
  1. 使用业务 id 作为消息的 key 。
  2. 在消费消息时,客户端对 key 做判定,未使用过放行,使用过抛弃。
常见的幂等方法示例:,