1.5.3 RocketMQ 有序消息

为什么要用有序消息

在这里插入图片描述
在这里插入图片描述

有序消息是什么

有序消息又叫顺序消息(FIFO消息)

是指消息的消费顺序和产生顺序相同,在有些业务逻辑下,必须保证顺序。

比如订单的生成、付款、发货,这个消息必须按顺序处理才行。

顺序消息分为全局顺序和分区(queue)顺序

全局顺序

一个Topic内所有的消息都发布到同一个queue,按照先进先出的顺序进行发布和消费

在这里插入图片描述
适用场景:性能要求不高,所有的消息严格按照FIFO原则进行消息分布和消费的场景。

分区顺序

对于指定的一个Topic,所有消息根据sharding key进行区块(queue)分区

同一个queue内的消息按照严格的FIFO顺序进行发布和消费

Sharding key是顺序消息中用来区分不同分区的关键字段,和普通消息的key是完全不同的概念。

在这里插入图片描述

适用场景:性能要求高,根据消息中的sharding key去决定消息发送到哪一个queue。

全局顺序与分区顺序对比

在这里插入图片描述
在这里插入图片描述

如何保证消息顺序

在MQ的模型中,顺序需要由三个阶段去保障:

  1. 消息被发送时保持顺序
  2. 消息被存储时保持和发送顺序一致
  3. 消息被消费时保持和发送消息一致

在这里插入图片描述

RocketMQ 的有序消息原理

RocketMQ 顺序消息的实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

有序消息的缺陷

发送顺序消息无法利用集群的Failover特性,因为不能更换MessageQueue进行重试

因为发送的路由策略导致的热点问题,可能某一些MessageQueue的数据量特别大

  • 消费的并行读依赖于queue数量
  • 消费失败时无法跳过

RocketMQ 有序消息的使用

官网教程: http://rocketmq.apache.org/docs/order-example/

发布了47 篇原创文章 · 获赞 15 · 访问量 7932

猜你喜欢

转载自blog.csdn.net/weixin_43871142/article/details/104993126