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

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

Laravel Redis 隊列忽略限制

Laravel Redis 隊列忽略限制

PHP
梵蒂岡之花 2023-07-01 16:42:10
我正在使用 Laravel Horizon 和 Redis,我正在嘗試限制它。我使用的外部 API 的速率限制為每分鐘 100 個請求。我需要提出大約 700 個請求。我進行了設置,以便添加到隊列中的每個作業僅在作業本身中執行一個 API 調用。因此,如果我限制隊列,我應該能夠保持在限制范圍內。由于某種原因,沒有發生限制,而是超出了隊列(當然,這會觸發許多 API 錯誤)。然而,節流閥在本地工作,但不在我的服務器上工作。我最初試圖根據 Laravel 的隊列文檔進行限制,但只能讓它在本地工作,所以我轉而嘗試Github 上的laravel-queue-rate-limit包。根據自述文件,我將以下內容添加到我的queue.php配置文件中:'rateLimits' => [        'default' => [ // queue name            'allows' => 75, // 75 job            'every' => 60 // per 60 seconds        ]    ],     由于某種原因,當我在本地 Ubuntu 環境中運行它時,限制可以正常工作,但它在我的服務器(也是 Ubuntu)上不起作用。在服務器上,它只是吹過隊列,就好像沒有適當的節流一樣。我是否做錯了什么,或者可能有更好的方法來處理速率受限的外部 API?
查看完整描述

1 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

看來您提到的軟件包(laravel-queue-rate-limit)與 Horizon不能很好地配合。使用 Laravel 的內置方法可能會更好。
在 Laravel 的隊列中,添加->block(60)匹配->every(60),以便默認超時不會啟動并在 60 秒之前調用另一個回調。

Redis::throttle('torn-api')->allow(75)->every(60)->block(60)

另外,請考慮向 Horizon 的 config 添加超時和最大重試值(config/horizon.php)。failed您還可以使用作業本身中的方法記錄任何異常。

Horizon 配置中的設置retry_after和值。timeoutretry_after在配置中的價值應始終大于完成工作所需的時間。并且該timeout值應該比該值短幾秒retry_after?!斑@將確保處理給定作業的工作人員始終在重試作業之前被殺死?!?


查看完整回答
反對 回復 2023-07-01
  • 1 回答
  • 0 關注
  • 150 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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