目录
在一些业务场景下,我们希望消息被并发处理,提高处理效率;
另一些业务场景下,为了保证业务数据处理顺序,需要优先保证消息消息的消费顺序。
1、关键点
保证RocketMQ消息顺序消费的关键主要有以下几点:
-
保证生产者消费者用同一topic
-
保证生产者消费者用同一topic下的同一个queue(默认一个topic下有4个queue)
-
发消息的时候用一个线程去发送消息
-
消费的时候 只用一个线程去消费一个queue里的消息(默认MessageListenerConcurrently使用20个线程去消费处理消息
)或者使用MessageListenerOrderly
-
如果多个queue都有消息,只能保证每个单个queue里的消费是顺序的
2、生产者
生产端要保证使用指定topic下的指定queue,顺序消息的使用需要在producer的send()方法中添加MessageQueueSelector接口的实现类(或者使用包里已经有的实现SelectMessageQueueByHash等),并重写select选择使用的队列,因为顺序消息局部顺序,需要将所有消息指定发送到同一队列中。
package rocketmq.FIFO;
import org.apache.rocketmq.client.exception.MQBrokerException;
import