VP导航 VP导航
首页 提交网址

资讯文章 资讯 · NEWS

失败了就重试,是目录站最容易写错的那行代码

2026-10-24 约 1,232 字 预计阅读 3 分钟 yiyunkj

失败了就重试,是目录站最容易写错的那行代码 失

后台任务失败的默认处理,很多代码里就一句:失败了重新丢回队列。写的时候觉得没问题,出事那天才发现重跑一次和跑两次的后果完全不一样。

异步任务的重试、幂等与死信队列四道保险

图片来源:网络,版权归原作者所有,侵权请联系删除

第一道保险:幂等键别从内容哈希里取

重试安全的含义是同一个任务跑一次和跑三次结果相同。要做到这一点,得先有个稳定的身份。

常见的错误是用任务内容的哈希当去重键。两条不同的业务事件可能生成一模一样的内容——站点 A 和站点 B 在同一分钟被巡检、内容字段恰好相同——哈希一样,第二条就被当成重复丢掉了。正确做法是每次投递都带一个稳定的事件 ID,重试时 ID 不变,接收方记住处理过的 ID,再见到就直接返回成功。

这个 ID 的存储时长要大于你的最大重试窗口。重试能持续一天,去重记录只留两小时,那么一天前的事件重放进来还是会被当成新事件处理一遍。

第二道保险:退避必须带抖动

固定间隔重试的问题在并发下才暴露:一千个任务同时失败,一分钟后同时重试,把刚恢复的下游再打一次。这就是重试风暴。

标准写法是指数退避加抖动,delay = min(上限, 基数 × 2^次数) × random(0.5, 1.0),让重试时间散开。次数要有硬上限,比如六次,间隔大致走 1 分钟、5 分钟、30 分钟、2 小时、12 小时、24 小时这一档,总窗口在一天半左右。

第三道保险:不是所有失败都该重试

按状态码分,判断规则很清楚:

  • 该重试的:5xx、408、429,以及连接超时、读取超时这类网络错误。对方临时不可用,等一等可能就好。
  • 不该重试的:400、401、403、404、422。对方明确拒绝了这次请求,重发一百次结果一样,只是白白占用队列。
  • 要特别处理的:429 和 503 通常带着 Retry-After 响应头,按它给的时间等,别自己拍脑袋定间隔。

有一条例外要记住:超时不代表没执行。请求发出去了,对方处理完了,只是响应没回来。这种情况重试,前提是幂等已经做好,否则就是重复执行。

第四道保险:耗尽之后要有地方去

重试次数用完之后,任务不能凭空消失。做法是丢进死信队列,同时发出告警信号:队列长度、最老任务的年龄、按任务类型的失败率,这三个数上墙。

死信队列还需要一个能手动重放的入口。修完下游的问题,运维要能把这批任务重新放回去跑,而不是删掉重来。没有重放入口的死信队列,最后一定会变成没人敢看的黑洞。

顺序这件事要提前说清

最后一个设计决策是顺序保证,而且要对下游说清楚,不要让人猜:

保证级别含义代价
尽力而为无序可能乱序,也可能重复最省事,多数场景够用
按资源有序同一个条目 ID 的事件按产生顺序到达队列按资源键分区
全局有序所有事件一个总顺序基本等于单写单读,很贵

目录站的条目状态变更通知选第二种就够:按条目 ID 分区,同一个条目的"审核通过"和"上架"不会颠倒。不同条目之间谁先谁后无所谓。另外在每个事件里带上一个单调递增的序号,接收方就能自己发现漏了或者乱了,去拉一次全量对账。

重试不是容错,是把失败往后推。真正让系统稳下来的,是幂等、退避、分类和兜底这四件事一起在场。

本文标签 异步任务重试 幂等设计 目录站后台任务
← 上一篇 改表结构的脚本也该进版本库:目录站的数据库迁移该怎么 下一篇 → 收录了阿拉伯语站点之后:目录站的 RTL 布局和那份

— 本文完 —

提交网址

发现好站,欢迎自荐收录

站内搜索

站点统计

  • 今日审核0
  • 已收录站点3744
  • 正常访问3738
  • 失联站点6
  • 累计访问175

网站分类

  • AI工具 0
    AI对话0 AI绘画0 AI写作0 AI编程0 AI音视频0 AI办公效率0
  • 开发编程 0
    前端开发0 后端开发0 移动开发0 开源与代码托管0 数据库0 开发文档与教程0
  • 设计素材 0
    UI设计0 图标素材0 免费图库0 字体下载0 配色工具0 设计模板0
  • 站长工具 0
    网站统计0 SEO工具0 域名与主机0 收录提交0 建站程序0 运维监控0
  • 学习教育 0
    编程教程0 语言学习0 职业技能0 公开课与慕课0 考试题库0 中小学教育0
  • 生活服务 0
    交通出行0 外卖点餐0 房产租房0 医疗健康0 政务办事0 快递物流0
  • 影音娱乐 0
    影视观看0 音乐音频0 游戏资源0 短视频直播0 小说阅读0
  • 电商购物 0
    综合商城0 比价工具0 导购返利0 二手交易0 团购优惠0
  • 综合其他 1
    实用工具0 资源合集0 小众站点0 个人博客0 论坛社区0
  • 新闻资讯 0
    科技资讯8 财经媒体1 行业动态0 社会热点0 综合门户0
  • 资讯文章 390

最新收录

  • 阿里巴巴矢量图标库
  • 通义千问
  • 车机屋-专业车机系统研究平台,海量正
  • Kimi
  • DeepSeek
  • 首页那个「最新收录」模块,到底对抓取
  • 到底能扛多少:目录站的压测该测什么,
  • 分支开一周才合回来:目录站的分支策略

浏览排行

  1. 满分作文网 6
  2. Let's Enhance 3
  3. 淘菜菜 3
  4. MasterClass 3
  5. TypeScript 中文网 3
  6. Zhengziying 3
  7. 得意生活 3
  8. 镇江网友之家 3

联系我们

bQ:12345678

电话:400-8888-888

邮箱:admin@example.com

时间:09:00-21:00

友情链接

车机屋·焊锡条·探兔AI导航·静电测试仪·大学生联盟

关于我们|广告合作|隐私条款|网站地图

原ICP备00000000号-1,@2026

由 Z-BlogPHP 驱动