我目前正在调度队列中的作业以立即发送API事件,在繁忙时间,这些队列中的作业需要保留到API不那么繁忙时的整夜,我如何保留这些队列中的作业或将其安排为仅从凌晨01:00运行第二天。
排队的作业调用当前看起来像:
EliQueueIdentity::dispatch($EliIdentity->id)->onQueue('eli');
在同一队列上还有其他作业,所有这些作业都需要在忙碌的时间内保留
您可以使用延迟分派(请参阅https://laravel.com/docs/6.x/queues#delayed-dispatching):
// Run it 10 minutes later:
EliQueueIdentity::dispatch($EliIdentity->id)->onQueue('eli')->delay(
now()->addMinutes(10)
);
或通过另一个碳实例,例如:
// Run it at the end of the current week (i believe this is sunday 23:59, havent checked).
->delay(Carbon::now()->endOfWeek());
// Or run it at february second 2020 at 00:00.
->delay(Carbon::createFromFormat('Y-m-d', '2020-02-02'));
您得到图片。
使用延迟在特定时间运行作业。
EliQueueIdentity::dispatch($EliIdentity->id)
->onQueue('eli')
->delay($this->scheduleDate());
用于计算时间的助手,处理介于00:00到01:00之间的极端情况,这会延迟一整天。尽管未指定如何处理忙,但还是制作了一个可以实现的伪示例。
private function scheduleDate()
{
$now = Carbon::now();
if (! $this->busy()) {
return $now;
}
// check for edge case of 00:00:00 to 01
if ($now->hour <= 1) {
$now->setTime(1, 0, 0);
return $now;
}
return Carbon::tomorrow()->addHour();
}