Laravel Queue Timeout 的幾個實戰筆記

整理 Laravel queue timeout、retry 與 job 拆分時最容易踩到的幾個點。

真正讓 queue 難用的,通常不是 queue 本身,而是你把一段本來就不穩定的流程包進 job 之後,才第一次正視它。

我現在看 timeout 這件事,會先分成三個層次:

我先看三個層次

  1. 這個 job 到底是不是單一責任。
  2. 失敗之後重跑,系統會不會出現副作用。
  3. timeout 發生時,現在的錯誤訊息能不能讓人真的追到問題。

先拆 job,再談 timeout

如果一個 job 裡同時做「查資料、打第三方 API、處理圖片、更新通知狀態」,它本來就不該靠調大 timeout 解決。比較好的做法通常是把流程拆成幾個更可觀察的 job,並在邊界上保留明確的狀態欄位。

另外一個常見問題是 retry。很多人把 queue 當成可靠機制,但其實它只是把失敗延後。若你的 job 不是 idempotentretry 會把問題放大。例如第三方扣款、發送 email、更新積分這種有副作用的行為,都必須先定義「重跑一次是否安全」。

我後來會優先做的,不是先改 timeout 秒數,而是先補這些東西:

我會先補的觀察點

  • 讓 log 能看到 payload 的關鍵識別資訊
  • 讓失敗狀態能回寫資料庫
  • 把明顯不穩定的外部請求隔離成獨立 job

當這三件事都做完之後,timeout 調整才有意義。否則你只是把不清楚的失敗,變成更晚才發生的失敗。