Laravel JobId, как использовать его, чтобы проверить, выполнена ли работа

У меня есть проблема, как проверить, выполнена ли работа или нет. Я смотрю повсюду, но не вижу, чтобы с Laravel / Lumen было что-то, с чем я, возможно, скучаю. Пример кода:

$job = ((new FooJob($data)));
$jobID = dispatch($job);

if(is_numeric($jobID)) {
  while(elapsedTime < 10sec) {
    CHECK_JOB_SOMEHOW_IF_IS_DONE !?!
  }
}

Я установил https://github.com/gilbitron/laravel-queue-monitor который действительно помогает, чтобы сохранить данные о выполненных работах. Там я тоже ничего не вижу.

У меня есть Lumen 5.4 framework.

2 ответа

Решение

Я выпустил это решение:

Когда задание выполнено в конце Job::Handle, я ставлю отметку "Redis" для этого конкретного задания (задайте ключ redis "job:[ID_JOB]" val 1), а затем в части запроса я проверяю этот ключ Redis при всплывающем окне. вверх, и это все. Работает нормально.

Еще одно решение было бы через систему событий lumen / laravel, чтобы сделать отметку Redis, но для того, что я хочу, это кажется немного излишним.

Вам нужно будет создать таблицы jobs и jobs_failed согласно документации Queues - Lumen.

Необходимо будет создать файл queue.php в папке app/config, следуя шаблону файла:

return [
    'default' => env('QUEUE_DRIVER', 'sync'),
    'connections' => [
        'sync' => [
            'driver' => 'sync',
        ],
        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 60,
        ],
    ],
    'failed' => [
        'database' => env('QUEUE_CONNECTION', 'mysql'),
        'table' => 'jobs_failed',
    ], ];

После создания таблиц при использовании метода диспетчеризации информация будет сохранена в таблице заданий.

Для обработки очереди используйте команду php artisan queue:work

Другие вопросы по тегам