亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

LARAVEL:重新排隊是一個壞主意嗎?

LARAVEL:重新排隊是一個壞主意嗎?

PHP
ITMISS 2022-08-19 16:06:42
我想知道重新排隊一個laravel工作是否是一個壞主意。我有一個場景,一旦用戶將Facebook帳戶集成到我的應用程序中,我就需要從Facebook上拉出用戶的帖子。我想提取{x}天歷史數據。Facebook api 像任何其他 api 一樣,每分鐘有 api 請求的限制。我跟蹤請求標頭,一旦達到速率限制,我就將這些信息保存在數據庫中,對于每個重新排隊,我檢查我是否有資格調用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);           }        }     }}上面的片段是一個粗略的想法。這是個好主意嗎?我發布這個問題的原因是看起來像一個遞歸,它會嘗試直到返回true.這可能需要6分鐘.我擔心在我的應用程序中會發生任何影響。提前致謝self::dispatch($user->id);$fbhelper->canPullData()
查看完整描述

1 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

重試作業不是一個壞主意,它只是內置于作業設計中。Laravel對此事進行了重試,即工作可以執行不可靠的操作。


作為我一直在處理的項目中的一個例子,我們正在使用的外部API每發送100個請求就有1-5個http 500個錯誤。這是由 的內置重試功能處理的。Laravel


從5.4開始,您可以在類中設置它。這將完全按照您的要求執行操作,而無需定義邏輯。最后,為了達到重試限制,您可以定義一個名為retryAfter()的函數,該函數指定何時應重試作業。Laravel


class FacebookData {

    public $tries = 5;


    public function retryAfter() {

        //wait 6 minutes

        return 360;

    }

}

如果你想保持你的邏輯,你只重試429錯誤,我會使用相反的方法來刪除作業,如果它不是429。


if ($res['code'] !== 429) {

    $this->delete();

}


查看完整回答
反對 回復 2022-08-19
  • 1 回答
  • 0 關注
  • 111 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號