限制队列任务的执行频率
上篇教程我们实现了队列任务的并发执行数量限制,这可以通过 Redis::funnel
方法实现:
今天我们来看看如何实现队列任务的执行频率限制。
假设我们希望在一个小时内只执行五次指定队列任务,参考 Laravel 队列文档,这可以通过 Redis::throttle
方法来实现,对应的实现代码入下:
传入 throttle
方法的值对应的是槽位标识,然后通过 every
限定时间窗口为 1 小时,通过 allow
限定该时间窗口内任务执行次数上限为 5。如果超过这个限制,则 10 分钟后重试,计时从任务第一次执行开始。
可以看到,队列任务的执行频率限制和并发执行数量限制是不一样的,前者是在某个时间窗口内最多能执行的任务次数,强调总数,与队列处理器进程数量无关,只看统计次数,而后者是同一时间正在执行的任务数量,强调并发,一般也就对应着能同时执行该任务的队列处理器进程的数量。
No Comments