如何保证消息有序
约 405 字大约 1 分钟
2025-04-10
如何保证有序
要保证顺序消息,首先要,先让生产者发送的消息是有序的。再然后,要保证消费消息是有序的。
那么如何保证生产者发送消息有序?
RocketMQ 中消息发送的 3 种方式:同步、异步、单向。要保证发送消息的顺序,只能保证同步发送,且必须是单个生产者。
其次,利用队列的FIFO
特性,保证需要顺序消费的消息在同一个队列里,且只有一个消费者消费。
全局有序
如果要保证消息的全局有序,首先只能由一个生产者往 Topic
发送消息,并且一个 Topic
内部只能有 一个队列(分区)。消费者也必须是单线程消费这个队列。这样的消息就是全局有序的!
不过一般情况下我们都不需要全局有序,即使是同步 MySQL Binlog
也只需要保证单表消息有序即可。
部分有序
一个生产者也可以,只要同类消息发往指定的队列即可
将Topic
内部划分为我们需要的队列数,消息通过特定的策略发往固定的队列中,每个队列对应一个单线程处理的消费者,这样完成了部分有序的需求,又可以通过队列数量的并发提高消息处理效率。