我想知道重新排隊 laravel 工作是不是一個壞主意。我有一個場景,一旦他們將 facebook 帳戶集成到我的應(yīng)用程序中,我需要從 facebook 中提取用戶帖子。我想提取 {x} 天的歷史數(shù)據(jù)。facebook api 像任何其他 api 一樣限制每分鐘有 api 請求。我跟蹤請求標頭,一旦達到速率限制,我將這些信息保存在數(shù)據(jù)庫中,并且對于每個重新隊列,我檢查我是否有資格調(diào)用 facebook api這是更好的可視化的代碼片段<?phpnamespace App\Jobs;class FacebookData implements ShouldQueue{ /** * The number of seconds the job can run before timing out. * * @var int */ public $timeout = 120; public $userid; public function __construct($id) { $this->userid=$id; } public function handle() { if($fbhelper->canPullData()) { $res=$fbhelper->getData($user->id); if($res['code']==429) { $fbhelper->storeRetryAfter($res); self::dispatch($user->id); } } }}上面的代碼片段是一個粗略的想法。這是一個好主意嗎?我發(fā)布這個問題的原因是self::dispatch($user->id);看起來像一個遞歸,它會嘗試直到$fbhelper->canPullData()返回 true。這可能需要 6 分鐘。我擔心我的應(yīng)用程序會發(fā)生任何影響。提前致謝
1 回答

開心每一天1111
TA貢獻1836條經(jīng)驗 獲得超13個贊
重試工作不是一個壞主意,它只是內(nèi)置到工作設(shè)計中。Laravel 對此進行了重試,認為作業(yè)可以進行不可靠的操作。
作為我一直在處理的項目中的一個示例,我們正在使用的外部 API 每發(fā)送 100 個請求就有 1-5 個 http 500 錯誤。這是您由 的內(nèi)置重試功能處理的Laravel。
從Laravel5.4 開始,您可以像這樣在類中設(shè)置它。這將完全按照您的意愿進行,而無需定義邏輯。最后,為了達到重試限制,您可以定義一個名為 retryAfter() 的函數(shù),它指定何時重試作業(yè)。
class FacebookData {
public $tries = 5;
public function retryAfter() {
//wait 6 minutes
return 360;
}
}
如果你想保持你的邏輯只重試 429 錯誤,我會使用它的逆來刪除作業(yè),如果它不是 429 的話。
if ($res['code'] !== 429) {
$this->delete();
}
- 1 回答
- 0 關(guān)注
- 105 瀏覽
添加回答
舉報
0/150
提交
取消