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