Laravel Queues | Очереди на Laravel | Как реализовать долгие задачи

Поделиться
HTML-код
  • Опубликовано: 9 сен 2021
  • В этом уроке я покажу, как применять очереди в Laravel и в каких случаях их стоит применять. Разберем создание Job (Джобов) и на примере простой отправки письма увидим, как меняется поведение приложения при использовании очередей и без их использования.
    🔗 Официальная документация по очередям: laravel.com/docs/8.x/queues
    🔗 Laravel Horizon: laravel.com/docs/8.x/horizon
    ✅ Instagram: / lectoria.pro
    ✅ VK: lectoria
    ✅ Facebook: lectoria.pro
    ✅ Сайт проекта Lectoria: lectoria.pro
    🖥 Обучение веб-разработке Lectoria: / @lectoria
    🖥 Обучение разработке на MODX Revolution: / openmodx
  • НаукаНаука

Комментарии • 49

  • @darkfateinc7333
    @darkfateinc7333 2 года назад +1

    Очень круто, что ты полностью показал все шаги. Благодаря уроку понятно не только как использовать jobs, но и в какой последовательности они работают с контроллером.

  • @bonefabric
    @bonefabric 2 года назад +1

    Хорошие видео, каких мало в сети. Спасибо

  • @johnsnow24
    @johnsnow24 2 года назад +2

    Отличный урок. Большое спасибо.

  • @khomaldi
    @khomaldi 2 года назад +2

    это было полезно. спасибо)

  • @dmitrykevdin7425
    @dmitrykevdin7425 2 года назад +2

    Спасибо!

  • @LeonardoOleg2
    @LeonardoOleg2 2 года назад +2

    спасибо, полезно

  • @mh6228
    @mh6228 2 года назад +2

    Спасибо тебе большое за старания... Сделай пожалусто урок по поводу событий и их слушателей что вообще из себя они представляют

  • @MaxKlassen
    @MaxKlassen 2 года назад +2

    Спасибо! У вас лучшие ролики по Laravel! Расскажите, пожалуйста, еще про работу с событиями

    • @lectoria
      @lectoria  2 года назад

      Про события в одном из следующих роликов обязательно расскажу.

    • @ardixq
      @ardixq 2 года назад

      @@lectoria честно?

    • @lectoria
      @lectoria  2 года назад

      @@ardixq Читаю, уже 3 месяца прошло ))) Время летит беспощадно. У меня даже сценарий к уроку по событиям подготовлен. Вот прям совсем скоро будет ролик. Не всегда получается записать быстро, сейчас все очень плотно по рабочим задачам...

  • @kirilyaksa
    @kirilyaksa 2 года назад

    Спасибо

  • @anatoliiilescu839
    @anatoliiilescu839 2 года назад +1

    Супеeeeeeeeeeeeeeeeeeр!

  • @user-mj9wm6dl1c
    @user-mj9wm6dl1c 2 года назад

    Ура! новое видео на лучшем канале.. как раз передо мной стоит задача создать очереди: 1) проверка 500 сущностей по 5 штук в минуту, запуская все это в 1 час ночи раз в сутки... вот пока не пойму как ограничить "по 5 в минуту" (ограничение стороннего API, откуда буду тянуть данные)

    • @lectoria
      @lectoria  2 года назад +1

      Да очень просто. Перед обработкой следующих 5-ти сущностей запоминай текущее время, после окончания их обработки возьми разницу между текущим временем и временем, которое ты сохранил. Если эта разница меньше 1 минуты, то подожди, если больше 1 минуты, то запускай обработку следующих 5-ти сущностей по такому же принципу.

    • @user-mj9wm6dl1c
      @user-mj9wm6dl1c 2 года назад

      @@lectoria да, в эту сторону и думал... но вроде в параметрах воркера очередей есть параметр, отвечающий за лимит.... как дойду до джобов - читану документацию подробнее.... пока настраиваю бэкенд (взял Nova для бэкенда, чтоб с формочками не долбаться.. покрывает 90% потребностей админки на УРА"... Спасибо еще раз, Артем, за самые толковые уроки.. я в php недавно (полгода... ).. пришлось в 42 года резко сменить профессию =).. ваши уроки - просто отличные.. а то весь Ютуб полон "индусского кода" либо "Гоша Дударь, C# за 15 минут" 😁

  • @phpfreelancer5458
    @phpfreelancer5458 2 года назад +2

    все классно но музыка на фоне мешает она то громче то тише и ударники , если есть альтернатива поставь какую то мягкую мелодию классику

  • @user-vf7pc4tn9z
    @user-vf7pc4tn9z Год назад

    покажи как работать с rabbitmq и другими микросервисами там например на fastapi

  • @divansimdrive
    @divansimdrive 2 года назад

    Минус в том что надо очередь вручную запускать через консоль. Не хватает конечно в php цикла событий как в node.js, для того чтобы после выполнения основного стека, сразу или паралельно выполнялось отложеное задание. А не потом когда то там по команде из консоли. У меня например нет доступа к консоли на хостинге и консольные команды запускать не получится, только если из кода. Остается вешать на крон, но крон довольно ресурсоемкая штука, на сколько я помню при ручном запуске весь сайт подвисает. Возможно только если диспатчить сначала а потом сразу вызывать консольную команду следом из контроллера, не вызовет ли это тоже задержку и подвисание.

    • @lectoria
      @lectoria  2 года назад +1

      По сути что-то вроде цикла событий в Laravel как раз реализовано через запуск демона-обработчика очереди.
      А то, что касается доступа к консоли, то у меня здесь такие рассуждения: Laravel обычно используют не для простых проектов, а для тех, где требуется специфичная логика и длительная поддержка, такие проекты целесообразно хостить не на виртуальном хостинге, а на виртуальном выделенном сервере (VPS/VDS) или на физическом выделенном сервере. Благо, что цены сейчас на VDS не сильно отличаются от виртуального хостинга. Для виртуального хостинга же, как вы верно заметили, есть крон, как правило, к нему хостер дает доступ через веб-интерфейс. Вы можете повесить на крон запуск обработчика очереди каждую минуту и будет почти то же самое. Но это, как мне кажется, больше костыль, чем адекватное решение.
      Решение диспатчить, а потом сразу вызывать консольную команду - тоже выглядит как костыль. Поэтому, я думаю, лучше потратить пару часов на изучение развертывания сервера на VDS и забыть про виртуальный хостинг навсегда. По настройке VDS у меня есть видео: ruclips.net/video/wKghw1bhzbM/видео.html

  • @codeurient
    @codeurient 2 года назад

    а можно урок про то как работать с базой данных через паттерн репозиторий ?
    иииииииииии в прцессе работы с данными как использовать атрибут pivot для моделей и включить его в запросы по поиску в RestApi ?

  • @user-ib9py6bv4t
    @user-ib9py6bv4t 2 года назад

    Не могли бы Вы добавить видео про широковещание (Broadcast) или хотя бы как делать динамические онлайн-оповещения на сайте?

    • @lectoria
      @lectoria  2 года назад +1

      Есть такое видео в планах. Пока не могу сказать точные даты выхода. Следите за новыми выпусками.

  • @alexandr-v
    @alexandr-v 2 года назад

    Спасибо за урок.
    А запускать эти очереди получается на обычном хостинге не выйдет? для этого нужен будет vps?

    • @lectoria
      @lectoria  2 года назад +1

      Все зависит от хостинга. Если есть доступ к ssh, то по идее должно получиться. Единственное, что я помню, на виртуальных хостингах стоит ограничение на время запуска процесса, поэтому, возможно, отправить воркер в бэкграунд на 100% не получится.
      В общем, если хочется без костылей и по-человечески, то лучше хотя бы VPS ))

    • @Lubenchenko
      @Lubenchenko 2 года назад

      Через cron можно запустить

  • @irvicon
    @irvicon 2 года назад

    Подскажите есть ли возможность использовать очереди на шаред хостинге?

    • @lectoria
      @lectoria  2 года назад

      Честно говоря, не думал об этом. Но, как мне видится, вряд ли такое получится, потому что для работы с очередями нужен процесс менеджера очередей, который должен быть постоянно запущен. На шаред хостинге хостер вряд ли такое позволит.

  • @yuriishportko5935
    @yuriishportko5935 Год назад

    Как можно организовать очереди если приложение развернуто на нескольких серверах и нужно чтобы некоторые задачи выполнялись только на тех серверах где в енв к примеру стоит флаг? хостинг на амазоне...

    • @lectoria
      @lectoria  Год назад

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

  • @olegkuhalskiy6423
    @olegkuhalskiy6423 2 года назад

    Добрый вечер, как можно реализовать такой функционал : Изображение загружаются на определенной странице, далее попадают в очередь обработки
    в которой происходит наложение фильтра размытия, добавление водяного знака, создание
    уменьшенной копии изображении, после того как все готово изображению присваивается
    статус «готово»

    • @lectoria
      @lectoria  2 года назад +1

      Создайте джоб, который будет отправляться в очередь, а уже в джобе делайте с изображением все, что душе угодно. Как пример, можно использовать вот этот пакет для обработки картинок: image.intervention.io/

  • @mh6228
    @mh6228 2 года назад +1

    Ещё урок по теме что такое API

  • @user-gw2dw5qs5w
    @user-gw2dw5qs5w Год назад

    Такой вопрос от новичка: команду php artisan queue:work нужно запустить после того как проект выложил на хостинг и потом забыть про нее? Она не отвалится? Как отслеживать или предусмотреть случай, что сервер откажет на время - ведь в этом случае насколько понял нужно заново ее вводить?

    • @lectoria
      @lectoria  Год назад +1

      Если просто запустить php artisan queue:work, то если он случайно отвалится, то автоматически не перезапустится. Поэтому рекомендуется использовать supervisor для того, чтобы он контролировал, что процесс запущен. И если вдруг отвалится, то supervisor автоматически его перезапустит.

  • @talas12341
    @talas12341 2 года назад +1

    А поподробней про отлавливатель емейл можно?

    • @lectoria
      @lectoria  2 года назад

      Конечно ) Инструмент называется mailhog, бесплатный: github.com/mailhog/MailHog

  • @stasproedition659
    @stasproedition659 2 года назад

    Можете рассказать про более продвинутый уровень программирования, солид, ddd, dto, хоть что то из этого) потому что уроков на ютубе нету особо

    • @lectoria
      @lectoria  2 года назад

      Эти темы, мне кажется, сродни философским, потому что в них нет на 100% четко детерминированных правил и их можно трактовать по-разному, поэтому я такие темы, честно говоря, даже не рассматривал для видео. У меня обучение программирование происходило эмпирически - практика, практика и еще раз практика, поэтому у меня нет четкого понимания, всегда ли я следую правилам solid, ddd, dto, но когда я иногда про них вспоминаю и перечитываю, о чем это все, понимаю, что в большинстве случаев, особенно в последнее время, я следую этим принципам иногда даже неосознанно :) В общем, это я к тому, что сходу разложить по полочкам эти принципы и объяснить их в видео я не смогу, нужно будет основательно подготовиться. Но за наводку - спасибо. Добавлю в список тем себе.

    • @digitalturkistan1857
      @digitalturkistan1857 2 года назад

      Канал Тимура Шемсединова глянь

  • @user-dw6gg7qh6s
    @user-dw6gg7qh6s 8 месяцев назад

    Приветствую. При отправке письма с вложением возникает такая ошибка - Serialization of 'Illuminate\Http\UploadedFile' is not allowed . Погуглил, пишут, что надо сперва сохранить файл на диске. Но я так и делал. Помогите разобраться

    • @lectoria
      @lectoria  8 месяцев назад

      Отправка происходит через Job. А Job делает сериализацию данных. Файл не может быть сериализован. Для того, чтобы корректно обрабатывать такой кейс, перед сериализацией, файл необходимо сохранить на диск, а когда происходит десериализация - забрать его с диска и приаттачить к письму.

    • @user-dw6gg7qh6s
      @user-dw6gg7qh6s 8 месяцев назад

      @@lectoria Да я и так сначала сохранил его на диске. Может запилишь как-нить ролик про то, как грузить большие файлы на диск с помощью очередей?

  • @ddrdeveloper
    @ddrdeveloper 2 года назад

    Я не совсем понял, этот функционал заменяет стандартный CRON на хостинге?

    • @lectoria
      @lectoria  2 года назад +1

      Не совсем. Это похоже на cron, но с гораздо бОлььшими возможностями. CRON просто запускает какой-либо скрипт с определенной периодичностью, а механизм очередей позволяет программно решать, какие задачи отправлять в очередь, с какой задержкой, с каким количеством неудачных попыток и так далее.

  • @olegkuhalskiy6423
    @olegkuhalskiy6423 2 года назад

    Laravel/horizon на windows не работает ?

    • @lectoria
      @lectoria  2 года назад +1

      Не пробовал его запускать под виндой, так как не работаю в ней вот прям совсем.
      Может кто-нибудь из подписчиков что-то ответит?

  • @devcrghome7061
    @devcrghome7061 2 года назад

    не совсем понятно. Тема не раскрыта. Запустили с консоли - тупость, так я могу и с базы отправить сам, да и глупость эта штука... Как такое положить в CGI нет, иначе глупость. Есть Демон, окей - а как он работает? Что если сервер перезагружается, сам запустится? Вот больше вопросов, чем сути... Понимаете - есть ракета, на которой Илон полетит на Марс, и Вы такой - "как полетит - ща раскажу, вот сядет и полетит"... Что?

  • @ardixq
    @ardixq 2 года назад

    Артем Зернов, это что за приколы? где новые видео?