Асинхронные задания Laravel

Я хочу запускать асинхронные задания Laravel и работать вечно. Насколько я понимаю, мне нужно настроить Jobs и распихать их по отдельным очередям.

Я установил .env - QUEUE_DRIVER=database и запустил php artisan queue:table и php artisan migrate соответственно.

и я пробежал php artisan make:job MyJob

(на данный момент таблица очередей пуста, но я не знаю, сделал ли я что-то не так)

Меня в основном смутило то, как он собирается запускать все задания и запускать их вечно или запускать задание изначально?

Насколько я понимаю, для запуска задания мне нужно позвонить:

MyFirstJob::dispatch();

но где мне его вызывать, чтобы работало все время и навсегда?


person senty    schedule 30.10.2017    source источник
comment
вы можете использовать для этого инструмент мониторинга процессов, такой как супервизор и monit, проверьте эту конфигурацию супервизора, предоставленную самой документацией LARAVEL laravel.com/docs/5.4/queues#supervisor-configuration   -  person Alleo Indong    schedule 30.10.2017
comment
Вы также должны понимать, как работает Queues, очередь — это просто список JOB, чтобы эти задания были PROCESSED, вам нужно будет иметь WORKER, чтобы запустить laravel worker, просто запустите php artisan queue:work   -  person Alleo Indong    schedule 30.10.2017
comment
Но если я запущу php artisan queue:work, я не смогу запускать другие команды в Linux, где я запускаю другие команды, верно? Я так запутался, и я не мог найти никаких полезных ресурсов вокруг. Я был бы признателен, если бы вы могли предложить какие-либо ссылки или добавить ответ. Я понимаю подход рабочих и рабочих мест, но я не мог найти, как его выполнить. Кроме того, является ли очередь «базы данных» плохой для такой задачи (или зачем вместо этого использовать супервизора)? Я пытаюсь запустить различные http-вызовы, чтобы получить данные из разных API.   -  person senty    schedule 30.10.2017
comment
прочитайте мой первый комментарий :) Это должно решить вашу проблему   -  person Alleo Indong    schedule 30.10.2017
comment
@AlleoIndong Я настроил супервизор, и он, кажется, работает, однако моя проблема в том, что моя таблица вакансий пуста. В более ранних версиях я мог добавить флаг --queued, но я не понял, как это сделать на 5.5. Что я делаю не так?   -  person senty    schedule 30.10.2017
comment
Здесь из Laravel 6 и у меня возникла та же проблема... задания таблицы всегда пусты   -  person Atef    schedule 08.04.2020


Ответы (2)


нужно поставить все задания

$schedule->job(new Job1)->everyMinute(); 
$schedule->job(new Job2)->everyMinute(); 
$schedule->job(new Job3)->everyMinute(); 

в функции schedule() в kernel.php, а затем планировщик будет обрабатывать все задания.

person ankit patel    schedule 30.10.2017
comment
Серьезно? Это для cron (запланированных задач). Вам нужно сделать это только в том случае, если у вас есть задание, которое вы хотите запускать каждую минуту. Чтобы добавить новое задание в очередь, вам просто нужно implement ShouldQueue по событию, а затем отправить это событие, когда это необходимо. - person Alleo Indong; 31.10.2017
comment
$schedule-›command('ваша-команда')-›everyMinute(); вы можете использовать команду запуска каждую минуту, а также вы можете установить задание, о котором я упоминал выше, тогда конфигурация, сделанная в вашем планировщике, проверит ваш файл ядра на наличие любого задания или команды события, настроена для запуска какой-либо задачи или нет, и на основе этого она будет установить все эти задачи в таблице заданий - person ankit patel; 01.11.2017

Вы можете получить лучшее представление по этой ссылке

https://spiderwebsolutions.com.au/laravel-5-1-and-job-queues-tutorial/

person ankit patel    schedule 30.10.2017
comment
Насколько я понимаю, я не могу использовать флаг --queued в Laravel 5.5, верно? Поэтому я создал задание без флага --queued. Я также создал и перенес таблицу очереди. Когда я запускаю php artisan queue:work, он выдает ошибку «Нет соединителя для []. Не могли бы вы добавить подробное объяснение, потому что я серьезно не мог найти никаких полезных ресурсов. Я был бы признателен! - person senty; 30.10.2017
comment
ты проверял свою таблицу вакансий? Я имею в виду, вы назначили какую-нибудь работу? - person ankit patel; 30.10.2017
comment
также вы настроили конфигурацию conf.d на своем сервере? - person ankit patel; 30.10.2017
comment
У меня есть setup conf.d и супервизор работает. Однако моя таблица заданий пуста, потому что в L5.5 я не смог запустить флаг --queued. Но моя работа создается в каталоге Jobs. Как вы думаете, что я делаю неправильно? - person senty; 30.10.2017
comment
Где это? Я вообще не называю работу. Разве это не должно быть выбрано из таблицы должностей? У меня также нет каталога app › Commands - person senty; 30.10.2017
comment
Давайте продолжим это обсуждение в чате. - person ankit patel; 30.10.2017