我正在使用 Laravel Horizon 和 Redis,我正在嘗試限制它。我使用的外部 API 的速率限制為每分鐘 100 個請求。我需要提出大約 700 個請求。我進(jìn)行了設(shè)置,以便添加到隊(duì)列中的每個作業(yè)僅在作業(yè)本身中執(zhí)行一個 API 調(diào)用。因此,如果我限制隊(duì)列,我應(yīng)該能夠保持在限制范圍內(nèi)。由于某種原因,沒有發(fā)生限制,而是超出了隊(duì)列(當(dāng)然,這會觸發(fā)許多 API 錯誤)。然而,節(jié)流閥在本地工作,但不在我的服務(wù)器上工作。我最初試圖根據(jù) Laravel 的隊(duì)列文檔進(jìn)行限制,但只能讓它在本地工作,所以我轉(zhuǎn)而嘗試Github 上的laravel-queue-rate-limit包。根據(jù)自述文件,我將以下內(nèi)容添加到我的queue.php配置文件中:'rateLimits' => [ 'default' => [ // queue name 'allows' => 75, // 75 job 'every' => 60 // per 60 seconds ] ], 由于某種原因,當(dāng)我在本地 Ubuntu 環(huán)境中運(yùn)行它時,限制可以正常工作,但它在我的服務(wù)器(也是 Ubuntu)上不起作用。在服務(wù)器上,它只是吹過隊(duì)列,就好像沒有適當(dāng)?shù)墓?jié)流一樣。我是否做錯了什么,或者可能有更好的方法來處理速率受限的外部 API?
1 回答

蝴蝶刀刀
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個贊
看來您提到的軟件包(laravel-queue-rate-limit)與 Horizon不能很好地配合。使用 Laravel 的內(nèi)置方法可能會更好。
在 Laravel 的隊(duì)列中,添加->block(60)
匹配->every(60)
,以便默認(rèn)超時不會啟動并在 60 秒之前調(diào)用另一個回調(diào)。
Redis::throttle('torn-api')->allow(75)->every(60)->block(60)
另外,請考慮向 Horizon 的 config 添加超時和最大重試值(config/horizon.php)
。failed
您還可以使用作業(yè)本身中的方法記錄任何異常。
Horizon 配置中的設(shè)置retry_after
和值。timeout
您retry_after
在配置中的價值應(yīng)始終大于完成工作所需的時間。并且該timeout
值應(yīng)該比該值短幾秒retry_after
?!斑@將確保處理給定作業(yè)的工作人員始終在重試作業(yè)之前被殺死?!?
- 1 回答
- 0 關(guān)注
- 157 瀏覽
添加回答
舉報(bào)
0/150
提交
取消