Laravel диспетчеризация очередей в установленное время - PullRequest
1 голос
/ 20 февраля 2020

В настоящее время я отправляю задания в очереди для мгновенной отправки событий API. В загруженное время эти задания в очереди нужно удерживать до ночи, когда API менее загружен, как я могу удерживать эти задания в очереди или планировать их запуск только с 01: 00:00 следующего дня.

вызов заданий в очереди в настоящее время выглядит следующим образом:

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

в этой же очереди находятся другие задания, все из которых необходимо будет удерживать в загруженное время

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Используйте задержку для запуска задания в определенное время.

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();
}
0 голосов
/ 20 февраля 2020

Вы можете использовать отложенную диспетчеризацию (см. https://laravel.com/docs/6.x/queues#delayed -диспетчер ):

// 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'));

Вы получаете картинка.

...