消息队列有序性

为什么要有序性

如一些场景下,会要求消息按顺序进行消费,如创建订单、订单支付这两条消息,创建订单需要再订单只是前进行消费。来看看各各消息队列是怎么实现有序性消费的。

理论

发送端:理论上,要实现消息的有序,需要保证发送者-broker-consumer,是一对一对一的情况才能实现。但是这种实现会有很严重的性能问题,broker只能单点,吞吐量不足。

消费端:消费端要保证有序,则队列内只能单线程消费。

RabbitMQ

不能保证消息顺序,如果要实现,那就只能单个broker,单个consumer进行消费。而且consumer也只能单线程消费。

Kafka

待看,Kafka没用过。

RocketMQ

1.自定义发送消息时候,可以按照业务id进行取模,让同一个业务id都发往同一个队列。

2.消费端队列设置为单线程消费(特殊的listener),Rocket能保证FIFO(先入先出)