posts

在线联机原型全集第 21 章导读:异步远征的延迟任务与幂等结算

本页是《在线联机原型全集》第 21 章的章节导读,解读异步回合制原型 proto-021-async-expedition。玩家派出小队远征两小时后到期结算,系统必须保证延迟任务可靠触发、结算接口重复调用不重复发放、失败可重试并对账,同时暴露延迟分布、重试率、重复投递率与账实差异等指标。导读提炼了本章六个核心验证目标(10 秒至 72 小时 TTL 调度、远征状态机、幂等结算与去重写模型、结算账本与离线对账、中途事件分支、全链路可观测),并给出 Go 或 Java 加延迟队列的技术栈建议与相邻章节脉络。

第 21 章把「时间」本身当作游戏机制。玩家发起远征后立刻扣除体力与门票、锁定小队,两小时后由延迟任务触发结算,中途还可能弹出限时十分钟的分支事件。这套玩法对服务端提出的要求极其直白:任务不能丢、结算不能重复发奖、失败必须能对账修复。它几乎是分布式事务课的最小可运行切片,却长着一张游戏的脸。

本章定位

核心验证目标

  1. 可靠延迟触发:支持 10 秒至 72 小时的 TTL,服务重启不丢任务,顺序可弱化但至少投递一次。
  2. 幂等结算:结算接口任意次重复调用都不重复发放,对经济系统的写入采用去重写模型。
  3. 可重试与对账:失败走退避重试,结算事件落入结算账本,支持离线对账修复账实差异。
  4. 远征状态机:草稿、进行中、待决策、到期、结算中、已结算、补偿中等状态清晰流转,补偿态由人工或自动修复收敛到已结算。
  5. 中途事件与分支:远征途中可插入限时分支决策,玩家选择或超时走默认分支,两条路径都必须进入同一结算账本。
  6. 全链路可观测:每个远征携带 trace_id,暴露延迟分布、重试率、重复投递率、幂等拦截率与账实差异五类指标。

技术栈建议

层次推荐选型说明
服务端Go、Java(Quarkus 或 Spring)或 Rust远征域与结算域解耦部署
调度延迟队列Redis、Kafka、RabbitMQ、Quartz 或 Chronos 任一
协议HTTP 加 WebSocketHTTP 发起与查询,WebSocket 推送进度
对账事件总线加账本两域通过事件总线对账,账本记录幂等键与增量
观测分布式追踪加指标以 trace_id 串联远征全生命周期

本章文章

文章核心内容
在线联机原型全集:第 21 章 异步远征(Async Expedition)——延迟任务 / 幂等结算原型延迟任务调度、可重试与去重、一次提交多端回执、最终一致性与幂等结算、远征状态机与结算账本

与相邻章节的关系

相关专题

全部文章 Game Golang Saas Rust 游戏开发 客户端开发 GameDev Products Lua 写作