-
先弄清楚什么是顺序消息?
-
即生产和消费的顺序一致。
-
消息顺序可以分为全局顺序和局部顺序
-
全局顺序
- topic下面全部的消息都要有顺序。所有的消息都要按照FIFO原则进行排序。
- FIFO,先进先出
- 性能要求不高
-
局部顺序(用的多)
- 保证一组消息被顺序消费即可,性能要求高
- 例如:每个订单中:创建订单消息、退款消息、物流消息、交易成功消息都会按照先后顺序发布。
-
-
使用RoketMQ举例……一个topic有多个queue
-
顺序发布
- 对于一个指定的topic,客户端按照一定的先后顺序发布消息
- 业务场景
- 订单的顺序流程是:创建、付款、物流、完成
- 订单号相同的消息会被先后发送到同一个队列中
- 技术实现
- 根据MessageQueueSelector里面进行自定义策略
- 同个业务ID放到同个queue中
- 如果订单号取模运算再放到selector中,同一个模的值都会投递到同一条queue
-
顺序消费
- 对于一个指定的topic,按照一定的先后顺序接受消息,即先发送的消息一定会先被客户端接收。
- 技术实现
- 消费端要在保证消费同一个topic里面的用一个队列,不应该使用MessageListenerConcurrently
- 应该使用MessageListenerOrderly,自带单线程消费消息,
- 不能再消费端再使用多线程进行消费。
- 消费端分配到的queue数量是固定的,集群消费会锁住当前正在消费的队列集合的消息。所以会保证消费的顺序性
- 注意:
- 顺序消息不支持广播模式
- 顺序消息不支持异步发送方式。否则将无法严格保证顺序
- 不能在消费端使用多线程消费
-
-
如何保证消息队列,生产端和消费端的顺序一致性?
最新推荐文章于 2023-06-15 18:35:58 发布