Автор: No Dishwashing Studio - hanxiao
Все права принадлежат автору, при перепечатке указывать источник
Зачем использовать очередь?
- Это слишком низко, чтобы изучать фреймворк и писать только обычные дела, мы должны попробовать какой-нибудь продвинутый геймплей (๑•̀ㅂ•́)و✧!
- Статья об очередях сообщений на CSDNподарит вам много вдохновения
Введение очереди в laravel framework
Лучший способ объяснить это, конечно, на примере.
-
Прежде всего, мы должны понять несколько понятий, от малого до большого: задачи очереди, очереди и соединения. Они относятся к отношениям включения в последовательность, в очереди много задач в очереди, и в соединении может быть много очередей.
-
Очередь задач: Операция, которую будет выполнять каждый пользователь, понимается как задача очереди. Например, когда пользователь регистрируется, мы отправляем электронное письмо с подтверждением. Мы будем выполнять регистрацию каждого пользователя. Мы можем абстрагировать такую задачу в задачу очереди.
-
очередь: Многие очереди сбиваются в кучу, ожидая обработки, образуя очередь
-
соединять: Формат хранения очереди
-
обработчик очереди Процесс, который обрабатывает поставленные в очередь задачи
-
-
Пример: Задача очереди: операция, такая как отправка электронного письма, позже мы заменим ее более простым примером операции.
Очередь: есть очередь для облегчения обработки процессором очереди после соответствующей очереди задач, мы не объясняем
Подключение: база данных (то есть mysql), redis и т. д., мы в основном ориентируемся на базу данных
настоящий бой
-
Создайте класс задачи с помощью этой команды:
php artisan make:job SendEmail
Папка Jobs и наш класс задач будут сгенерированы здесь
кстати создай
Controller
Нести ответственность за задачу по распространениюphp artisan make:controller QueueTest
-
Конкретная реализация кода:
Как создать новую работу в контроллере и передать параметры? Посмотри пожалуйста:
SendEmail.php:
QueueController.php:
маршрут --web.php:
Создайте таблицу данных задания:
php artisan queue:table
php artisan migrate
Сверхпростой процесс добавления очередей завершен, после запуска сервиса мы используем такие инструменты, как почтальон или браузеры для отправки запросов
Потом вы обнаружите, что даже если мы не добавим обработчик задач, наша задача все равно завершается со свистом, а в таблице заданий ничего нет, почему так? ? ?
Откройте файл .env
Измените его на базу данных, повторите запрос прямо сейчас, а затем просмотрите таблицу заданий.
-
Запустите обработчик поставленной в очередь задачи:
Однострочная команда:
php artisan queue:work
Это предложение может добавить много параметров, я не буду делать здесь слишком много утверждений, вы можете сами проверить описание документа, которое легко понять.
Мы обнаружим, что задача выполняется напрямую. Это потому, что когда мы только что добавили задачу, она основана на времени в это время и выполняется с задержкой в одну минуту. Когда мы включаем процессор, время уже вверх, поэтому задача очереди будет использована сразу
-
Используйте супервизор диспетчера процессов, чтобы наш диспетчер задач всегда работал в фоновом режиме, в противном случае мы можем оставить окно терминала открытым только для запуска процессора задач.
-
Установить
pip install supervisor
-
настроить
Запуск супервизора очень удобен для пользователя, ввод в командной строке
echo_supervisord_conf
Это напрямую даст нам содержимое файла конфигурации по умолчанию, мы скопируем его и создадим новый суффикс .ini или .conf в любом месте, где у текущего пользователя есть разрешение (我创建的路径:/usr/local/etc/supervisord.ini
), скопируйте содержимое и сохраните его, но часть содержимого необходимо немного изменить.Для более интуитивного просмотра работы нашего процесса внесите следующие изменения, чтобы удалить комментарии httpsserver и port:
Это позволяет нам просматривать процесс, работающий в браузере.
Затем измените последнюю строку следующим образом:
Поместите наш файл конфигурации laravel-worker здесь, создайте и отредактируйте наш файл laravel-worker.ini здесь
Еще несколько важных параметров:
-
command
: Насколько я понимаю здесь, надзиратель будет управлять процессом, сгенерированным этой командной командой, но так как мы не в папке проекта, мы не можем напрямуюphp artisan queue:work
, поэтому мы добавляем путь к нашему проекту перед artisan, а часть, покрытая мозаикой, является каталогом файлов нашего проекта laravel. -
user
: Текущее имя пользователя системы, root и имя пользователя, которое вы используете в настоящее время, могут быть -
последняя строка
logfile
: здесь нам нужно выбрать каталог, на который у нас есть права, а папки и файлы должны быть созданы нами вручную.
На этом подготовка руководителя завершена.
Затем запускается каталог файла конфигурации surpervisord -c, и моя команда:
supervisord -c /usr/local/etc/supervisord.ini
Введите в браузере
http://localhost:9001
, вы можете увидеть, как работает наш процессор задачНаши задачи очереди также успешно выполняются успешно
-
Ссылаться на:Статья в сообществе laravel о супервизоре обработки очереди задач
-