首页 > 其他分享 >一个比较麻烦的限流需求

一个比较麻烦的限流需求

时间:2024-06-07 17:45:25浏览次数:24  
标签:需求 队列 平台 外部 任务 限流 麻烦 延时

主要环节

1、前端接受用户请求,发送给后端建立任务;
2、后端接受请求后,创建任务记录(初始状态),将记录发送到消息队列;
2、消费者拿到任务后,将任务置为running,然后向外部平台发送请求,并向延时队列(5分钟)发送消息;
3、外部平台收到请求后,(正常)会在2分钟内向我方的接收接口提交结果,也可能(5分钟)超时无响应;
4、我方接收接口收到响应后,完成任务记录的后续工作,成功--输出结果,失败--置为失败;
5、若外部平台未能在时限内返回结果,延时队列负责将任务置为失败

实现细节:

1、使用消息队列是为了避免使用定时任务,定时任务间隔不好把控,多个定时任务进程还会导致任务的重复消费;
2、由于外部平台的并发限制为n,如果消费者实例数为x,每个实例并发为y,则必须保证全局并发数为x * y = n;
3、消费线程有唯一的consumerTag,可利用consumerTag建立redisson锁,获取锁才进行任务消费(保存consumerTag),收到外部平台的反馈后解锁;
4、根据1-2-3的步骤,在上一个消息完成或过期之前,当前消息的消费线程会等待锁,保证了x * y = n;
5、redisson是可重入锁,需要使用tryLockAsync(long waitTime, long leaseTime, TimeUnit unit, long threadId)传入随机的threadId,否则每次都能立刻重入上一次请求的锁,限流目的无法达到。
6、如果超时未能收到外部平台的反馈,可以通过设置leaseTime自动释放锁,如果不设置leaseTime,只要客户端不失去连接, 锁会由看门狗自动续期持有;
7、延时队列的主要工作是将任务置为失败,是必不可少的,也可以由它来实现锁的释放。

其他主体

1、rabbitmq
2、springboot的rabbitmq客户端
3、redisson
4、延时队列

标签:需求,队列,平台,外部,任务,限流,麻烦,延时
From: https://www.cnblogs.com/echo1937/p/18237613

相关文章

  • 从0到1训练私有大模型技能与应用实现 ,企业急迫需求,抢占市场先机
    从0到1训练私有大模型:技能构建与应用实现,助力企业抢占市场先机在当今数字化浪潮中,人工智能(AI)技术已成为企业实现创新和突破的关键。特别是在大模型技术领域,其强大的数据处理能力和泛化能力为企业提供了前所未有的机遇。为了满足企业急迫的需求,抢占市场先机,本文将从0到1探讨如何训......
  • 网络隔离后的跨网投递需求,要这样做才能让需求落地
    为了保护企业的核心数字资产、隔离有害的网络安全威胁、保障数据信息在可信网络内进行安全交互,越来越多的企业在网络建设时,选择进行网络隔离。应用较为普遍的网络隔离手段包括物理隔离、协议隔离、应用隔离等,而常见的状态是企业进行内部网络和外部互联网隔离,或者企业内部再进行如......
  • 简单实现限流中间件
    本文由ChatMoney团队出品引言在现代Web应用开发中,限流是一个重要的概念,它能够保护服务器免受流量攻击,确保服务的稳定性和可用性。Go语言以其高性能和并发处理能力在后端服务开发中广受欢迎。Gin是一个使用Go语言编写的Web框架,以其简洁和高效著称。在Gin框架中,通过中间件实现......
  • vr看房类需求实现实验
    大佬的博客三种前端实现VR全景看房的方案!说不定哪天就用得上!网上百度了一下,有多种实现方式,这里测试了其中一种pano2vr做出来这个样子   首先打开       红框内容自己设置,中文都能看懂,导出,搞定 ......
  • 发现情绪背后的真实心理需求,选择适合你的情绪调节方式
    一、教程描述心态对人的生活质量以及身体健康等多方面,都会产生非常重要的影响,受到不良情绪的影响,人的心态也会发生一定的变化。对于处于不良情绪状态的人来讲,应该重视学会调整自己的情绪。在心理学上,人的每种情绪背后都代表着一个心理需求,“负面情绪”也有非常重要的价值:......
  • Redisson 限流器源码分析
    Redisson限流器源码分析对上篇文章网友评论给出问题进行解答:redis的key是否会过期可以先阅读上篇文章:redis+AOP+自定义注解实现接口限流-古渡蓝按-博客园(cnblogs.com)注解AOP代码部分提取//调用Reids工具类的rateLimiter方法longnumber=RedisUtils.rat......
  • 网关限流功能性能优化
    本文主要从设计与原理方面分享优化过程中的思考,不涉及具体的代码实现。在分析过程中我会写一些当时思考的问题,在看后续答案时可以自己也先思考一下老的限流方案首先讲解一下原本网关限流功能的实现方案,省略其中的白名单,黑名单,令牌桶算法实现等一些细节限流策略中包含多种策略,......
  • redis限流
    前提redis+lua 滑动窗口--滑动窗口localkey=KEYS[1]localmaxSize=ARGV[1]localcurrentTime=ARGV[2]localstartTime=ARGV[3]localuuid=ARGV[4]localcurrentCount=redis.call('zcount',key,startTime,currentTime)if(currentCountandtonumber......
  • 满满的干货:AI大模型对网络五大需求及技术应对方案
    AI大模型对网络的需求主要体现在五个方面,即超大规模组网、超高带宽、超低时延、超高稳定性及网络自动化部署。为了应对这五个方面的需求,本文对业内一些主要的应对技术、思路和方案进行了梳理,供读者进行系统优化时做参考,不对具体技术实现细节做过多论述,对应的思维导图如下,仅......
  • 数据治理--企业数据服务 数据连接注册成API并且通过网关去限流 数据同步
      不直接开发hive的API访问速度慢,开放内存Presto的API去hive库查这样快 第一种不安全, 第二种公司内部用比较安全,结构文件落到对方ftp服务器 第三种一般跨网络同步 数据同步任务创建和执行监控          证券案例 ......