限制队列任务的执行频率


上篇教程我们实现了队列任务的并发执行数量限制,这可以通过 Redis::funnel 方法实现:

今天我们来看看如何实现队列任务的执行频率限制。

假设我们希望在一个小时内只执行五次指定队列任务,参考 Laravel 队列文档,这可以通过 Redis::throttle 方法来实现,对应的实现代码入下:

传入 throttle 方法的值对应的是槽位标识,然后通过 every 限定时间窗口为 1 小时,通过 allow 限定该时间窗口内任务执行次数上限为 5。如果超过这个限制,则 10 分钟后重试,计时从任务第一次执行开始。

可以看到,队列任务的执行频率限制和并发执行数量限制是不一样的,前者是在某个时间窗口内最多能执行的任务次数,强调总数,与队列处理器进程数量无关,只看统计次数,而后者是同一时间正在执行的任务数量,强调并发,一般也就对应着能同时执行该任务的队列处理器进程的数量。


点赞 取消点赞 收藏 取消收藏

<< 上一篇: 限制队列任务的并发数量

>> 下一篇: 通过熔断器处理不稳定的外部服务