Как избежать блокировки кода после выполнения Artisan::queue?

Как избежать блокировки основного потока после выполнения Artisan::queue? Консольная команда, запускаемая этим методом, не требуется для дальнейшей работы основного потока. Как можно решить эту проблему?
  • 13 февраля 2024 г. 11:28
Ответы на вопрос 4
Есть несколько способов избежать блокировки кода после выполнения Artisan::queue:

1. Использовать метод `dispatch` вместо `queue`: 

```php
use App\Jobs\ProcessQueue;

ProcessQueue::dispatch()->onQueue('queue_name');
```

2. Использовать метод `dispatchNow`, который будет выполнять задачу синхронно:

```php
use App\Jobs\ProcessQueue;

ProcessQueue::dispatchNow();
```

3. Воспользоваться методом `dispatchInBackground`:

```php
use App\Jobs\ProcessQueue;

dispatchInBackground(new ProcessQueue);
```

4. Использовать асинхронные очереди, например, использовать `database` драйвер:

```php
// Установка драйвера в файле .env
QUEUE_CONNECTION=database

// Запуск очередей
php artisan queue:work --daemon --sleep=3 --tries=3
```

5. Запускать очереди в фоновом режиме с помощью супервизора:

```bash
supervisorctl start queue-worker:*
```

Выберите наиболее подходящий для вашего проекта метод, чтобы избежать блокировки основного потока после выполнения Artisan::queue.
Вообще-то обрабатывальщик задач должен быть запущен отдельным процессом, например через cron, .service, pm2 или какой-нибудь supervisor , а не внутри самого обработчика запроса.
Если это у вас локальная разработка, то просто оставьте консоль открытой, а для других задача откройте новую. 
На боевом сервере запускайте отдельно, через supervisor или pm2.
начните в переключения QUEUE_CONNECTION в .env файле. 
sync = блокирует.
Похожие вопросы