Laravel 5.8 фоновая работа не в фоновом режиме - PullRequest
2 голосов
/ 30 июня 2019

У меня есть библиотека, которая импортирует много изображений, и я пытаюсь использовать фоновые задания Laravel. Для работы в очереди я следую документации Laravel.

Сначала (создать таблицу):

php artisan queue:table
php artisan migrate

Затем конфигурация в файле .env для Redis:

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=43216

Создать работу:

php artisan make:job CarsJob

CarsJob:

public function handle() 
{
    $cars = new CarsLibrary();
    $CarsLibrary->importAll();
}

Отправка задания в каком-либо действии в контроллере:

Первое, что я попробовал:

$importCarsJob = (new ImportCarsJob())->onQueue('import_cars');
$this->dispatch($importCarsJob );

Второе, что я пробовал:

$importCarsJob = new importCarsJob();
$this->dispatch($importCarsJob);

Я включил Redis на своем хостинге. Это виртуальный хостинг.

Если я получаю доступ к URL-адресу, я вижу, что это задание находится не в фоновом режиме, поскольку для завершения запроса требуется более минуты.

EDIT: Файл env указан выше, это config/queue.php:

    'connections' => [

    'sync' => [
        'driver' => 'redis',
    ],
    ... other drivers like beanstalkd

    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],


    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => env('REDIS_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
    ],

],
  • У меня нет REDIS_QUEUE в env файле.

1 Ответ

2 голосов
/ 30 июня 2019

Похоже, что вы не обновили свое соединение очереди в config/queue.php с sync до redis (или переменной среды QUEUE_CONNECTION). Драйвер sync выполнит задания немедленно, не помещая их в очередь.

Кстати, вам не нужна таблица базы данных очереди, если вы используете драйвер очереди redis.

...