【RabbitMQ-7】使用Redis实现分布式双端列表解决RabbitMq顺序消费
发布日期:2022-02-14 16:09:34 浏览次数:24 分类:技术文章

本文共 549 字,大约阅读时间需要 1 分钟。

消费端要保证消费的顺序性。

多个消息可能来源于一台机器,也可能来源于一个集群的多台机器,也可能来源多个集群。消费者如何去保证消息的有效性?

可以借助"双端列表"的数据结构实现消息节点的有效性。

场景:

  1. 消息1到达后,直接进行消费;
  2. 消息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. 当消息3到达后,根据后继指针查询消息2,若发现消息2未消费,那么存储消息3。

注意:

  1. 使用Lua脚本保证修改Redis消息状态和获取消息的原子性。
  2. 消息的删除:消息消费后,删除Redis中消息实体,只保留状态。(例如消息3的状态是已消费,那么可以将消息1,2进行永久删除)。
  3. 工作窃取:当消费者空闲时,可以直接去Redis获取任务进行处理。

转载地址:https://blog.csdn.net/qq_29595463/article/details/107864443 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【RabbitMQ-5】-SpringBoot2.x 生产者保证消息不丢失(confirm配置)
下一篇:【SpringCloud-1】多个微服务情况下,本地启动服务debug解决方案

发表评论

最新留言

做的很好,不错不错
[***.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