RabbitMQ如何保证顺序消费

生产者有序的情况下

如何保证顺序生产

单一生产者:消息生产的顺序性仅支持单一生产者。
串行发送:如果生产者采用多线程并行发送,则不同线程产生的消息无法保证先后顺序。

单个消费者

在这里插入图片描述

多个消费者

在这里插入图片描述

在这里插入图片描述

生产者无序的情况下

在这里插入图片描述

消息返回队列

假如生产者A发送消息1,生产者B发送消息2,生产者C发送消息3,由于是没办法保证顺序性,所以进入队列的顺序可能变成了3,1,2。
消费者拿到消息,应该判断redis中上一条消息有没有被消费,如果没有被消费,返回队列,如果被消费,正常消费。
以刚才的例子说明下:
消费者拿到消息2,发现消息1没有被消费,basicReject;
接着拿到消息1,发现是第一条消息,正常消费,同时把消息1放入redis;
接着拿到消息3,发现上一条消息2没有被消费,basicReject;
接着拿到消息2,发现消息1已经被消费(redis中判断),正常消费,同时把消息2放入redis;
接着拿到消息3,发现消息2已经被消费,正常消费,同时把消息3放入redis。
在这里插入图片描述

消息不返回队列

在这里插入图片描述

来源:https://www.bilibili.com/video/BV1zm4y1r7ct/?spm_id_from=333.337.search-card.all.click&vd_source=b901ef0e9ed712b24882863596eab0ca
顺序生产:https://www.bilibili.com/video/BV1Uj411G7Us/?spm_id_from=333.788&vd_source=b901ef0e9ed712b24882863596eab0ca

猜你喜欢

转载自blog.csdn.net/yzx3105/article/details/130672856