文件

設定

佇列容量、worker 數量、逾時與具名 preset。

Config

*Config 傳入 Newnil 時使用全部預設值。

type Config struct {
    Workers int                     // default = CPU * 2
    Size    int                     // default = Workers * 64
    Timeout time.Duration           // default = 30 * seconds
    Preset  map[string]PresetConfig // default = empty
}
欄位 型別 預設 說明
Workers int runtime.NumCPU() * 2 Worker goroutine 數量
Size int Workers * 64 pending heap 最大容量
Timeout time.Duration 30 * time.Second 逾時推算與晉升的基準
Preset map[string]PresetConfig 空 map 具名優先級與逾時設定

WorkersSizeTimeout 為零值時回退預設。非 nil 的 Preset 會 deep-copy 進佇列設定。

PresetConfig

type PresetConfig struct {
    Priority Priority
    Timeout  time.Duration
}
欄位 說明
Priority Enqueue 使用此 preset 名稱時的任務優先級
Timeout > 0 時在優先級縮放前覆寫基準 Config.Timeout0 則使用基準逾時

範例

q := goQueue.New(&goQueue.Config{
    Workers: 4,
    Size:    256,
    Timeout: 30 * time.Second,
    Preset: map[string]goQueue.PresetConfig{
        "urgent": {Priority: goQueue.PriorityImmediate},
        "batch":  {Priority: goQueue.PriorityLow, Timeout: 60 * time.Second},
    },
})

逾時推算

每次入隊解析逾時的順序(在 WithTimeout 覆寫之前):

  1. Config.Timeout 開始。
  2. 若 preset 名稱存在且 PresetConfig.Timeout > 0,改用該值。
  3. 依 preset 的 Priority 縮放。
  4. 限制在 15s–120s
Priority 計算
Immediate timeout / 4
High timeout / 2
Retry timeout / 2
Normal timeout
Low timeout * 2

WithTimeout(d) 會完全取代該次入隊的推算結果。

優先級晉升門檻

晉升等待時間在 New 時依 Config.Timeout 推導一次:

來源 等待 目標
Low clamp(Timeout, 30s, 120s) Normal
Normal clamp(Timeout*2, 30s, 120s) High

New 之後再改 Timeout 無效——晉升 map 在建構時固定。

入隊選項

入隊時的單次任務覆寫:

選項 效果
WithTaskID(id) 設定 task ID;空/省略 → 自動 UUID
WithTimeout(d) 覆寫推算逾時
WithCallback(fn) 成功後在新 goroutine 執行 fn(id)
WithRetry(max...) 啟用重試;可選上限(預設 3)

預設摘要

設定 預設
Workers runtime.NumCPU() * 2
Size Workers * 64
Timeout 30s
推算逾時下限 15s
推算逾時上限 120s
重試上限(啟用且無參數) 3
空 preset 名稱優先級 PriorityImmediate(未設定 map 項目的零值)

另見

EN