Задать вопрос
cryptodoxer
@cryptodoxer

Как добавить в очередь laravel только одну задачу?

Есть длинные задачи, от 2 до 30 минут. Нужно чтобы очередь не росла, если в воркере есть уже задача.
Что имеем.
Kernel.php

$schedule->command('source')->withoutOverlapping()->everyMinute();

Command

$count = Redis::lrange('queues:source', 0, -1);

if (count($count) == 0)
    dispatch((new \App\Jobs\Source())->onConnection('redis')->onQueue('source'));


Job для примера длинного воркера

public function handle()
{
    dump('job work');
    sleep(2000);
}


Но даже так вижу в очереди новые задачи, что висят по таймауту. То есть задача добавляется все равно, вне зависимости от условий.
  • Вопрос задан
  • 379 просмотров
Подписаться 1 Средний 10 комментариев
Решения вопроса 1
Maronus
@Maronus
$schedule
            ->call(function () {
                if (Queue::size('source') == 0)
                    dispatch(new Source())->onQueue('source');
            })
            ->everyMinute();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы