我正在使用 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
和值。timeout
您retry_after
在配置中的價值應始終大于完成工作所需的時間。并且該timeout
值應該比該值短幾秒retry_after
?!斑@將確保處理給定作業的工作人員始終在重試作業之前被殺死?!?
- 1 回答
- 0 關注
- 150 瀏覽
添加回答
舉報
0/150
提交
取消