当前位置: 首页 > news >正文

Rust 异步编程与 Tokio 运行时:先限制次数、预算与取消信号

Rust 异步编程与 Tokio 运行时:先限制次数、预算与取消信号

重试看起来很简单:失败了就再试一次。但我在练习异步请求时才意识到,重试会把一次失败变成更多请求。哪些错误可以重试、等多久、总共尝试几次,都要由调用场景决定,不能照搬一组固定数字。

我会先给请求设总超时,只对短暂的网络错误或可确认的临时状态重试。认证失败、参数错误和取消请求通常不应该重试。每次等待加一点随机抖动,避免很多任务恰好同一时间再次出发。

graph TD Error[请求失败] --> Classify{可重试吗} Classify -->|否| Return[返回可诊断错误] Classify -->|是| Budget{剩余时间和次数} Budget -->|有| Delay[退避加随机抖动] Delay --> Retry[再次请求] Budget -->|无| Return
use std::time::Duration; fn delay_for(attempt: u32, jitter_ms: u64) -> Duration { let base = 20_u64.saturating_mul(2_u64.saturating_pow(attempt)); Duration::from_millis(base.saturating_add(jitter_ms)) } #[test] fn delay_grows_without_overflowing() { assert!(delay_for(2, 3) > delay_for(1, 3)); }

这段代码只演示延迟计算,不生成伪随机数,也不代表适合任何服务。实际实现还要限制最大等待时间、传播取消信号,并用测试或压测确认不会在异常时堆积任务。日志里只记录脱敏后的错误类别和尝试次数,不记录请求正文或凭据。

http://www.jsqmd.com/news/1374231/

相关文章:

  • 技术实战中代价最高的错误:数据库事务、缓存与分布式系统避坑指南
  • Java 常用语法极简通关(一):Java 程序的基本骨架——main 方法、类、包与变量声明
  • 深度剖析 JVM 垃圾回收算法:从三大经典模型到 Region 分区与 ZGC 零停顿实战
  • 武汉华中企业往复式提升机选型攻略 优质设备挑选技巧 - 生活动态圈
  • 官方权威授权!广州合优网络获评 2023 年度网易外贸通全国代理商
  • 终极REPENTOGON安装与使用指南:为《以撒的结合:悔改+》带来革命性模组体验 [特殊字符]
  • Docker安装与配置全指南:从环境检查到性能优化
  • 基于大模型优化垂直轴风力发电系统已融合人工智能AI软件平台
  • 气温中位数获取指南
  • 终极指南:如何快速掌握KMS-Tools-Portable便携激活工具
  • Hadoop+Spark构建股票预测系统的核心技术解析
  • gotgbot实战案例:构建功能完备的Telegram支付机器人
  • 组件库自动化管理:从依赖梳理开始拆核心链路
  • 响应式布局与跨端 UI 一致性方案:上线前补齐校验、观测与回退
  • 如何用Photon光影包彻底改变你的Minecraft视觉体验
  • 细胞房里的“黄金45分钟”,有多少试剂死在路上?
  • WMPFDebugger深度解析:Windows微信小程序逆向调试技术实战指南
  • 撤销分支合并
  • 实战掌握OpenAI Baselines归一化技术:3大技巧解决强化学习训练难题
  • Mac Mouse Fix终极指南:3个简单步骤让普通鼠标在macOS上超越苹果触控板
  • 选安全门到底在选什么?王力一次性解决九大居家痛点,看完不再纠结! - 资讯在线
  • Hadoop+Spark股票预测系统架构与实现详解
  • DockerCopilot高级技巧:从容器列表到镜像管理的全面指南
  • 单片机毕业设计-基于 51 单片机的室内空气质量智能监测与联动通风装置设计 基于 STM32 的多传感器室内环境参数采集与阈值控制系统实现(017802)
  • openGauss 5.0到6.0升级实战指南与性能优化
  • 南宁恐龙馆评测:全息投影沉浸之旅 - 商业科技观察
  • ARM Cortex-M 原型落地:从演示代码到可运行功能
  • 《开源大模型食用指南》:3.2 万星的中文教程,手把手教你“吃“大模型
  • JVS-Logic实战:用可视化逻辑编排替代静态页面配置(附可调试执行流)
  • 基于改进CASCADE_RCNN的手势识别研究