Laravel在指定时间分派队列

问题描述 投票:0回答:2

我目前正在调度队列中的作业以立即发送API事件,在繁忙时间,这些队列中的作业需要保留到API不那么繁忙时的整夜,我如何保留这些队列中的作业或将其安排为仅从凌晨01:00运行第二天。

排队的作业调用当前看起来像:

EliQueueIdentity::dispatch($EliIdentity->id)->onQueue('eli');

在同一队列上还有其他作业,所有这些作业都需要在忙碌的时间内保留

laravel scheduling
2个回答
0
投票

您可以使用延迟分派(请参阅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'));

您得到图片。


0
投票

使用延迟在特定时间运行作业。

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.