简介
消息有序指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ可以严格的保证消息有序,可以分为分区有序或者全局有序。
- 全局有序:发送和消费参与的queue只有一个,效率低,不推荐
- 分区有序:有多个queue,但是每个queue中的消息的发送和消费都是有序的
要点
- 消息顺序发送
- 单线程同步发送
- 消息顺序储存
- 重写MessageQueueSelector接口中的select() 实现消息路由到一个queue
- 消息顺序消费
- 设置该监听器MessageListenerOrderly
- 同一时刻一个消费者中的一个线程对一个队列中的消息进行消费
- 消费者申请队列锁(只要一个消费者能消费该队列)
- 拉取消息进行消费,此时通过synchronized上锁(只有一个线程能够消费)