feat: serialize keyed tasks across queues with durable fencing tokens

This commit is contained in:
2026-09-17 18:25:00 +08:00
parent 993786476e
commit 958b4a8cea
43 changed files with 1319 additions and 82 deletions

View File

@@ -9,6 +9,8 @@ import (
// Attempt 表示一次任务执行尝试,保存租约、授权代次与独立结果。
// 对应表 pulse_attempts;这是服务端持久化模型,不直接作为 API 响应。
type Attempt struct {
// ConcurrencyToken 资源键的单调许可序号;零表示未启用,重连保留,新尝试递增。
ConcurrencyToken uint64 `db:"concurrency_token"`
// Record 包含命名空间、记录标识、并发版本和 UTC 时间。
core.Record
// TaskID 关联的 Pulse 任务标识。

View File

@@ -35,6 +35,10 @@ type Task struct {
RecoverySafety RecoverySafety `db:"recovery_safety"`
// BusinessKey 业务侧关联键,用于检索追踪,不自动提供业务幂等;可为空,表示尚未设置该关联或值。
BusinessKey *string `db:"business_key"`
// ConcurrencyKey 显式互斥资源键,命名空间内跨队列共享;空表示不启用。
ConcurrencyKey *string `db:"concurrency_key"`
// ConcurrencyKeyDigest 资源键精确 UTF-8 字节的域分隔摘要,与键同时为空或非空。
ConcurrencyKeyDigest *core.Digest `db:"concurrency_key_digest"`
// OwnerKind 来源资源类型,例如流程激活;为空表示无来源关联。
OwnerKind *string `db:"owner_kind"`
// OwnerID 来源资源标识,必须与来源类型同时有值或同时为空。

View File

@@ -9,6 +9,8 @@ import (
// WorkerSession 表示一次 Worker 连接的持久化身份与能力快照。
// 对应表 pulse_worker_sessions;这是服务端持久化模型,不直接作为 API 响应。
type WorkerSession struct {
// ConcurrencyKeys 是否明确支持互斥资源键与序号交付,旧 Worker 默认为假。
ConcurrencyKeys bool `db:"concurrency_keys"`
// Record 包含命名空间、记录标识、并发版本和 UTC 时间。
core.Record
// WorkerInstanceID Worker 进程实例标识,重连保留,进程重启应更换。