【RabbitMQ-7】使用Redis实现分布式双端列表解决RabbitMq顺序消费
发布日期:2022-02-14 16:09:34
浏览次数:24
分类:技术文章
本文共 549 字,大约阅读时间需要 1 分钟。
消费端要保证消费的顺序性。
多个消息可能来源于一台机器,也可能来源于一个集群的多台机器,也可能来源多个集群。消费者如何去保证消息的有效性?
可以借助"双端列表"的数据结构实现消息节点的有效性。
场景:
- 消息1到达后,直接进行消费;
- 消息2到达后,在消息2的后继指针域中获取到消息1的key,去redis中进行查询: 2.1 若消息1不存在,那么证明消息1未达到,消息2存储到Redis; 2.2 若消息1存在且状态是已消费,那么消费者消费消息2,并且查询消息2的后继指针,查询消息3是否存在,若消息3存在,那么直接消费消息3。 2.3 若消息1存在且状态是正在消费,那么消息2阻塞1s(根据实际业务定阻塞时间,也可以通过CAS实现),1s后再次查询redis,若消息1还是正在消费,那么将消息2放入到延时队列。若消息1状态变为已消费,那么直接去消费消息2。
- 当消息3到达后,根据后继指针查询消息2,若发现消息2未消费,那么存储消息3。
注意:
- 使用Lua脚本保证修改Redis消息状态和获取消息的原子性。
- 消息的删除:消息消费后,删除Redis中消息实体,只保留状态。(例如消息3的状态是已消费,那么可以将消息1,2进行永久删除)。
- 工作窃取:当消费者空闲时,可以直接去Redis获取任务进行处理。
转载地址:https://blog.csdn.net/qq_29595463/article/details/107864443 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月12日 23时30分05秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【通俗理解线性代数】 -- 矩阵的相似对角化
2019-04-27
【建模必备】遗传算法的基本原理与步骤(适应度函数与适应度分配)
2019-04-27
【建模必备】遗传算法的基本原理与步骤(交叉)
2019-04-27
【建模必备】遗传算法的基本原理与步骤(变异)
2019-04-27
【怎样写代码】向现有类型“添加”方法 -- 扩展方法(一):扩展方法概述
2019-04-27
【怎样写代码】向现有类型“添加”方法 -- 扩展方法(二):扩展方法的实现与调用
2019-04-27
【怎样写代码】向现有类型“添加”方法 -- 扩展方法(三):为枚举类型创建方法
2019-04-27
【怎样写代码】向现有类型“添加”方法 -- 扩展方法(四):在编译时绑定扩展方法的规则
2019-04-27
【怎样写代码】实现对象的复用 -- 享元模式(一):问题案例
2019-04-27
【怎样写代码】实现对象的复用 -- 享元模式(二):解决方案
2019-04-27
【怎样写代码】偷窥高手 -- 反射技术(一):前期准备
2019-04-27
【怎样写代码】对象克隆 -- 原型模式(二):解决方案
2019-04-27
又有六所大学考研预调剂系统已开放!
2019-04-27
如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!
2019-04-27
股市币市:数据分析与交易所公告(20190226)
2019-04-27
一份来自上海院校的考研预调剂系统已开放名单!
2019-04-27
股市币市:数据分析与交易所公告(20190227)
2019-04-27
如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!
2019-04-27
股市币市:数据分析与交易所最新公告(20190228)
2019-04-27
股市币市:数据分析与交易所最新公告(20190301)
2019-04-27