目录标题
- 生产者有序的情况下
- 如何保证顺序生产
- 单个消费者
- 多个消费者
- 生产者无序的情况下
- 消息返回队列
- 消息不返回队列
生产者有序的情况下
如何保证顺序生产
单一生产者:消息生产的顺序性仅支持单一生产者。
串行发送:如果生产者采用多线程并行发送,则不同线程产生的消息无法保证先后顺序。
单个消费者
多个消费者
生产者无序的情况下
消息返回队列
假如生产者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