rocketmq顺序消息指的是消费者接收顺序和生产者发送顺序一致,生产者在发送消息时,会发送到主题的多个队列,对应不同服务器的broker上,因为服务器处理速度的差异和网络通信延迟,这一批消息在消费时无法保证按照发送顺序接收;另外即使在同一队列上,由于消费者监听器默认是多线程(20个)处理的,也会导致消息乱序。
因此解决消息顺序问题要从2个角度出发,首先是生产端,需要保证顺序的同一批消息发到同一队列上。
MessageQueueSelector
生产者的发送方法传入队列选择器和消息的shardingKey,通过将shardingKey与队列总数取模得到队列,使得相同shardingKey的消息分到同一队列
对于同一shardingKey,生产者只能有一个进程,并且只能是单线程同步发送,才能保证顺序
SendResult sendResult = producer.send(msg, new MessageQueueSelector(