v1.1.3

錯誤

最後更新


本頁列出 go-queue 回傳或記錄的所有錯誤訊息、觸發條件,以及比對方式。

錯誤訊息


來源訊息觸發條件
Startqueue already started已在 Running
Startqueue already closed已 Closed
Enqueue原樣回傳 ctx.Err()傳入的 ctx 已取消或到期
Enqueueenqueue failed: staging queue is full堆長度達到 Config.Size
Enqueueenqueue failed: staging queue is closed已呼叫 Shutdown
Shutdownshutdown timeout: N tasks remaining堆排空前 ctx 到期
任務(僅記錄)task timeout after <d>任務超過逾時
任務(僅記錄)panic: <value>任務函式 panic
任務(僅記錄)context canceledStart 的 ctx 被取消,或 Shutdown 期限到時任務仍在執行或排隊中

比對錯誤


Enqueue 的 ctx 錯誤不經包裝直接回傳,因此 errors.Is(err, context.Canceled) 與 errors.Is(err, context.DeadlineExceeded) 可用。佇列已滿/已關閉的錯誤沒有公開 sentinel,只能比對訊息:
  1. if _, err := q.Enqueue(ctx, "email", sendEmail); err != nil {
  2. switch {
  3. case errors.Is(err, context.Canceled), errors.Is(err, context.DeadlineExceeded):
  4. // 呼叫端放棄
  5. case strings.Contains(err.Error(), "staging queue is full"):
  6. // 退避後再試
  7. case strings.Contains(err.Error(), "staging queue is closed"):
  8. // 佇列正在關閉
  9. }
  10. }

任務端的錯誤不會回到呼叫端,只會出現在 日誌事件。
EN