feat: add bounded task priority and fair application dispatch

This commit is contained in:
2026-09-17 18:45:54 +08:00
parent 958b4a8cea
commit 309ed75666
42 changed files with 1277 additions and 61 deletions

View File

@@ -55,6 +55,9 @@ func NormalizeSubmit(in SubmitInput) (SubmitInput, error) {
if err := ValidateConcurrencyKey(in.ConcurrencyKey); err != nil {
return in, err
}
if in.Priority < 0 || in.Priority > 9 {
return in, fault.Invalid("priority must be between 0 and 9")
}
if in.TaskTimeoutMS == 0 {
in.TaskTimeoutMS = 24 * 60 * 60 * 1000
}

View File

@@ -27,6 +27,8 @@ type SubmitInput struct {
BusinessKey string `json:"business_key,omitempty"`
// ConcurrencyKey 显式互斥资源键,同命名空间跨队列最多一个有效尝试;不代替业务幂等。
ConcurrencyKey string `json:"concurrency_key,omitempty"`
// Priority 冻结优先级,0至9,每级30秒排序优势,不改变最早执行时间。
Priority int16 `json:"priority,omitempty"`
// AvailableAt 最早执行时间;为空表示受理后即可进入派发范围。
AvailableAt *time.Time `json:"available_at,omitempty"`
// StartDeadlineAt 最晚开始时间;为空表示使用任务总截止时间。
@@ -67,6 +69,8 @@ type TaskView struct {
BusinessKey string `json:"business_key,omitempty"`
// ConcurrencyKey 显式互斥资源键,同命名空间跨队列最多一个有效尝试;不代替业务幂等。
ConcurrencyKey string `json:"concurrency_key,omitempty"`
// Priority 冻结优先级,0至9,每级30秒排序优势,不改变最早执行时间。
Priority int16 `json:"priority,omitempty"`
// AvailableAt 最早可执行时间,UTC。
AvailableAt time.Time `json:"available_at"`
// StartDeadlineAt 最晚开始时间;为空时使用任务总截止时间。
@@ -137,6 +141,8 @@ type TaskSummary struct {
BusinessKey string `json:"business_key,omitempty"`
// ConcurrencyKey 显式互斥资源键,同命名空间跨队列最多一个有效尝试;不代替业务幂等。
ConcurrencyKey string `json:"concurrency_key,omitempty"`
// Priority 冻结优先级,0至9,每级30秒排序优势,不改变最早执行时间。
Priority int16 `json:"priority,omitempty"`
// AvailableAt 最早可执行时间,UTC。
AvailableAt time.Time `json:"available_at"`
// DeadlineAt 任务总截止时间,UTC。