什么是顺序消费?
消息有序指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了 3 条消息,分别是订单创建、订单付款、订单完成。消费时,要按照这个顺序消费才有意义。与此同时多笔订单之间又是可以并行消费的。
rocketmq是怎么实现顺序消费的呢?
①rocketmq保证同一个订单的消息,一定要发送到同一个队列
②并且该队列只有一个消费者,也就是说 同一个队列,不能出现多个消费者并行消费的情况
到这里可能有的人会问,一个队列只有一个消费者,那性能岂不是很低?关于这个情况,rocketmq的解决方法是,虽然同一个队列不能并行消费,但是可以并行消费不同的队列。就是上面说的同时多笔订单之间又是可以并行消费。
我们通过这张简图可以大致理解顺序消费的原理;
在上一篇的中我们提到了一个叫做 MessageQueueSelector 的组件,就是producer在发送消息的时候,如果不指定队列就会默认发送到topic下面的4个队列中的任意一个,如果使用MessageQueueSelector 就可以在发送消息的时候指定队列,依照这样的思路,我们来整理一下实现的思路;
1. 发送一组顺序订单消息,创建订单,订单支付,完成订单,但是他们拥有相同的订单号;
2. 根据订单号通过取模算法将相同的订单号的消息发送到指定的队列;
3. 消费端顺序获取订单的各个流程信息;
下面我们使用代码来实现一下