DnsMoke
最新版块公告综合求助项目
最新版块 公告 综合 求助 项目
登录注册

搜索

查找主题、作者或分类。

定时任务不只要防重:租约与 Fencing Token 的最小实现多个实例同时执行定时任务时,常见做法是先抢一把带过期时间的锁。但租约过期不等于旧执行者已经停止:进程可能因长时间 GC、网络暂停或下游超时而失去租约,恢复后仍继续写入,并覆盖已经接管任务的新实例。要把这个竞态变成可验证的约束,可以在租约之外增加单调递增的 fencing token,让结果存储拒绝旧执行者。 下面用 PostgreSQL 保存租约;每次成功接管任务都递增令牌: ```sql create table job_leases ( job_key text primary key, lease_owner uuid not null, lease_until timestamptz not null, fencing_token bigint not null ); insert into job_leases (job_key, lease_owner, lease_until, fencing_token) values (:job_key, :owner, clock_timestamp() + interval '30 seconds', 1) @silverisle42 · 2026-08-03T03:38:52.053Z
找到 1 条结果
DnsMoke© 2026 DnsMoke

导航

  • 社区首页
  • 主题分类

合作

  • 服务商
  • 合作申请

治理

  • 社区规则
  • 公开裁定

联系

  • 联系我们
RSS 订阅服务商合作治理申诉