Laravel урок №54: [ Очереди - цепочки задач (queue, jobs, chain) ]

Поділитися
Вставка
  • Опубліковано 1 жов 2024
  • На реальном примере учимся работать с цепочками задач очереди. Рассмотрим методы withChain(), chain(); Само понимание работы с цепочками можно уместить в пару предложений и одну строку кода, но при подобном подходе если ты начинающий - не придет понимание как и зачем это вообще надо. По этому в этом видео тебя ждет увлекательное путешествие в мир лара-очередей с максимально возможным количеством воды! Таков путь.
    #mandalaravelian #мандаларавелец #отец_тэйлор #laravel
    Видеокурс по изучению фреймворка Laravel (5.7.2 - 6)
    *
    ★ Автор: Дмитрий Афанасьев.
    ★ Канал: clck.ru/JVYct
    *
    ► Выразить благодарность, поддержать донатом развитие канала.
    www.donational...
    *
    ► Еще интересные курсы:
    ★ Видеокурс по Laravel: clck.ru/JVYa2
    ★ Видеокурс по Git: clck.ru/JVYYm
    ★ Объяснение SOLID: clck.ru/JVYXq
    ★ Шаблоны проектирования: clck.ru/JVYX7
    ★★★ Все курсы → clck.ru/JVYVd

КОМЕНТАРІ • 75

  • @СергейН-в7в
    @СергейН-в7в 10 місяців тому

    00:25 - определение цепочки задач; пример usecase`a ;
    06:30 - алгоритм цепочки задач
    06:40 - комманды в Laravel(урок?)
    10:20 - AbstractJob
    11:20 - GenerateMainCatalogJob - подробно о работе всей цепочки очередей
    30:10 - "тестирование" работы очереди с "ошибкой"

  • @a-shchedrin8466
    @a-shchedrin8466 4 роки тому +13

    Шут ква ква это топ

  • @tmsts2049
    @tmsts2049 4 роки тому +7

    В бд есть заявка на генерацию документа.
    1 job. По рест апи на сторонний ресурс отправляется запрос на генерацию документа.
    2 job. На том же ресурсе запрашивается готовность, если изменился статус, то меняется статус в бд, если документ готов, то переходит к следующему джобу.
    3 job. Выкачивает файлы на мой хостинг, меняет статус заявки.
    4 job. Информирует клиента по почте о выполненной работе (с этим ещё предстоит разобраться).
    Подключил супервизор, поигрался с таймингами. Работает стабильно и без моего присмотра.
    Думаю теперь буду оплату делать похожим образом (это хорошая идея?).
    Спасибо за отличный курс.

  • @ЯрославАндроид-й7ч
    @ЯрославАндроид-й7ч 4 роки тому +4

    Я теперь понимаю свою жену, когда он ждала новую серию "Игры престолов".
    Как только вышло новое видео сразу ищу время чтобы продолжить обустраивать "poligon".

  • @Denis-di6hc
    @Denis-di6hc Рік тому

    Финальный босс оказался сложным

  • @КосмоЁжик-е7т
    @КосмоЁжик-е7т 2 роки тому

    Благодарю

  • @Lolar123
    @Lolar123 4 роки тому +2

    Ох. Я заглянула в это видео после ваших старых курсов. Качество-то как улучшилось!
    И зовук наконец-то хороший.

  • @saharaprotocol
    @saharaprotocol 3 місяці тому

    а может ли быть подход структурирования папок вроде такого: ?
    Есть основная папка "модуля" app/Blog/ в ней вложены её контроллер, обсервер, репозиторий, реквест и тп.
    И так же другие "модули" app/Shop/.... app/Delivery/...
    т.е. все файлы которые относятся к конкретному "модулю" все в его папке. Так можно делать? Или лучше как в курсе? Если можно, то какие + и - подходов, если есть таковые?
    Спасибо.

    • @DmitryAfanasyev
      @DmitryAfanasyev  27 днів тому

      Да, можно. Это, так сказать, первый шаг в кастомную модульность. Но лучше не придумывать велосипед и изучить уже существующие пакеты реализовывающие модульность для Laravel. Например Porto/Apiato.

    • @saharaprotocol
      @saharaprotocol 27 днів тому

      @@DmitryAfanasyev Спасибо.

  • @TeddyKeys
    @TeddyKeys 3 роки тому

    Дмитрий, очень срочно нужен ответ на вопрос: я создал цепочку джобов, но мне нужно на некоторые джобы в этой цепочке поставить делэй.
    А вообще задача следующая: нужно отправить сообщения пользователю раз в 3 секунды (всего 3 сообщения), и затем как эти сообщения отправятся отправить следующее.
    Перед всем этим, у меня происходит логика генерации этих сообщений, которую я поместил в начало цепочки. Как быть?

  • @ДенисТ-ю9я
    @ДенисТ-ю9я 3 роки тому

    А еще один вопрос, возможно не по теме, т.к вы единственный кто ответил, больше не к кому написать).
    Как я только не пробовал.
    Заранее благодарен.
    Необходимо правильно составить запрос к БД.
    1. таблица shops (магазин)
    id,
    2. таблица shop_map_point (точку на карте, у каждого магазина может быть несколько точек)
    id, city_id
    3. таблица products (товар)
    id, shop_id, category_id
    4. таблица categories (категория)
    id,
    5. city (города)
    id,
    Мы находимся в категории id = 5, в городе id = 10
    Нужно выбрать все товары, у которых
    - МАГАЗИН имеет ТОЧКУ НА КАРТЕ (city_id = 10)
    - У этих МАГАЗИНОВ есть ТОВАР в этой КАТЕГОРИИ (category_id = 5)

  • @АнтонРевякин
    @АнтонРевякин 4 роки тому +1

    Еее я досмотрел курс! Теперь надо всю доку хотя бы просто прочитать и начну смотреть про шаблоны проектирования.

  • @nickfist9187
    @nickfist9187 3 роки тому

    Досмотрел. Все. Очень круто! Даст ли этот курс полное понимание? Нет. Но вместе с книгами (параллельно читал Стаффера М.) - огонь(книга суховата). Автор без ЧСВ - ответит, если вопрос не идиотский. Крепко рекомендую.

  • @centerdevelopments3533
    @centerdevelopments3533 3 роки тому

    А почему такой задаче не подходит pipeline?

  • @TsA1ex
    @TsA1ex 4 роки тому +1

    1. Как относишься к такому варианту, когда одна джоба запускается из другой? Это плохая практика? Потом не всегда получается отследить последовательность выполнения джоб.
    2. Не сталкивался с таким? Была ситуация, когда в конфиге queue.php стоит retry after на 5 минут и при запуске командой artisan:queue также в параметрах 5 минут. Но по факту джоба выполняется 1 минуту и отваливается. Куда копать?
    3. Используешь ли какой-нибудь UI инструмент для мониторинга, управления джобами? Например, чтобы руками перезапустить упавшие очереди?
    4. Какой есть программный способ мгновенно остановить выполнение группы очередей? Например, есть 5 разных рассылок писем, которые запущены и нужно мгновенно остановить 1 из них. Проблема в том что все джобы одинаковые, отличаются только сериализованным объектом рассылки, который лежит в колонке payload

    • @xym4uk
      @xym4uk 4 роки тому +1

      2) посмотри в php.ini максимальное время выполнения скрипта, либо в джобе укажи время
      3)может horizon?

    • @NoNameUkr
      @NoNameUkr 4 роки тому +1

      1) logger
      2) retry_after вроде обсуждали в 53 или 52 видео, тебе нужен timeout
      4) horizon вроде можно останавливать) ну либо php artisan queue:restart но опасная вещь)

    • @TsA1ex
      @TsA1ex 4 роки тому

      @@NoNameUkr retry_after именно нужен, пауза между попытками. Но не работает ни то, ни другое. Более того, параметр php time limit написанный прямо перед длительным участком не даёт никакого эффекта, джоба всё равно через минуту идёт на повтор.
      Но есть момент, всё добро работает в докере

    • @NoNameUkr
      @NoNameUkr 4 роки тому

      @@TsA1ex ua-cam.com/video/IsS8HO4knBY/v-deo.html пересмотри еще раз, может поможет, у меня небыло проблем с retry_after, по этому мне сложно понять что там у тебя.
      "In addition, you may specify how many seconds Laravel should wait before retrying a job that has failed using the --delay option. By default, a job is retried immediately:" laravel.com/docs/5.8/queues#dealing-with-failed-jobs

  • @КонстантинБречко-д8п

    как обычно хорошо рассказал и показал на примере! Было интересно посмотреть как работают цепочки очередей. Ни разу не приходилось с таким сталкиваться, но хоть в теории посмотрел! Здорово! Большое спасибо за такие уроки!

  • @ДенисТ-ю9я
    @ДенисТ-ю9я 3 роки тому

    Спасибо за видео.
    А как лучше сделать:
    У меня есть контроллер, в нем я тяну данные их yml файла 10000 товаров и сохраняю.
    Что мне сделать чтобы сначала взялись 100 товаров и сохранились, потом еще 100 и тд.

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 роки тому

      Порционально брать данные и кусками складывать в файл. С помощью очереди. Если произошел сбой - удаляем временный файл.

  • @RomanChill
    @RomanChill 3 роки тому

    Здравствуйте, Дмитрий! Вот есть такой вопрос. Вот у меня есть тоже цепочка задач, с такими приоритетами(queue), как high и low. Если в таблице jobs есть хоть один high, то очередь не должна трогать low. И если мы используем такой метод как `release` то можем не трогать id что б он не перезаписывался. Можно ли такое реализовать?

  • @МаксимСлободянюк-н9о

    Дмитрий, спасибо за курс. Хорошая подача, интересные примеры.

  • @АндрейМеренков-к8ъ

    Спасибо за урок. Все доходчиво и просто)

  • @winstonwolf2981
    @winstonwolf2981 4 роки тому

    А кто-нибудь сталкивался с тем, что очереди работают как будто бы через раз? Один раз отправил - ок, второй/третий не ок. Причём, когда не выполняются, они висят в редис как reserved

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому

      Случалось. Причин не нашел....

  • @darknet106
    @darknet106 4 роки тому +1

    Спасибо вам за уроки Дмитрий! собираетесь ли вы снимать про ШИРОКОВЕЩАНИЕ В ЛАРАВЕЛ? если да ,то когда?)

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому

      Очень много всего хочется - всё упирается в свободное время...... Записал себе идею

    • @darknet106
      @darknet106 4 роки тому

      @@DmitryAfanasyev спасибо большое,будем ждать!

    • @xym4uk
      @xym4uk 4 роки тому +1

      Почитай про laravel echo server. Там достаточно просто

    • @darknet106
      @darknet106 4 роки тому

      @@xym4uk ок, спасибо

  • @BearFromSteam
    @BearFromSteam 4 роки тому

    Крутое видео. Жалко не рассмотрел, как в такой цепочке сделать общую "память". Понимаю, что вариантов 1000 и 1, но может есть какой-то каноничный. Спасибо, как всегда на высоте!

  • @xym4uk
    @xym4uk 4 роки тому

    Около 17 минуты говоришь, что маленькие скрипты хорошо выполнять. А какие могут быть проблемы/подводные камни при выполнении скриптов на 5+ минут?

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому

      Твой вопрос не понятен мне.

  • @ivanbrosalin7934
    @ivanbrosalin7934 4 роки тому

    Спасибо за видео! Любое ваше новое видео жду больше Нового года.

  • @userfromworld
    @userfromworld 4 роки тому

    Спасибо за классные уроки... донат еще не сделал но обязательно сделаю ты ДОСТОИН бро, большой респект тебе

  • @artemgiant
    @artemgiant 4 роки тому

    Объяснение топ !!!

  • @АндрейЧугунцев
    @АндрейЧугунцев 4 роки тому

    Спасибо огромное за видео! Есть вопрос по задачам. Можно ли обратиться за консультацией и если можно то куда? :-)

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому

      Как минимум сюда. Если не я - то кто-нибудь из сообщества ответит

  • @eaglesm1993
    @eaglesm1993 4 роки тому

    Ух ты, пример прям в тему, мне грядет подобный интегратор делать) (правда он может быть на симфони а не на ларе)

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому +4

      Пример из реальной жизни. Реализован был в августе 2019 работает как часы. Доработки проблем не доставляют.

  • @НиколайКвасов-п5и
    @НиколайКвасов-п5и 4 роки тому

    Спасибо за ролики, Дмитрий

  • @dmitryleiko2869
    @dmitryleiko2869 4 роки тому

    Спасибо, огромное)

  • @akaramanec
    @akaramanec 3 роки тому

    Добрый день. Похоже, что эта проблема имеется только у меня ((( ...
    В видео не показана нутрянка " GenerateGoodsFileJob", Сделал его по подобию остальных:

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 роки тому

      Код в точности соответствует коду из видео? Перепроверяли?

    • @akaramanec
      @akaramanec 3 роки тому

      @@DmitryAfanasyev Прям не один раз всматривался и перепроверял ... просто именно эта джоба (GenerateGoodsFileJob) не была показана в видео и я ее додумывал сам ...

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 роки тому

      Это пустой класс отпачкованный от AbstractJob

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 роки тому

      А конструктор абстрактного джоба заполнен как в видео? Испльзуемые трейты так же на месте?

    • @akaramanec
      @akaramanec 3 роки тому

      @@DmitryAfanasyev Да, Абстрактный джоб полностью слизал... вот он:

  • @ВалентинАнохин-ц8ш

    Подача стала еще круче!

  • @Almas-2002
    @Almas-2002 4 роки тому

    Напиши свой блог на чистом php плесс

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому +1

      Уже ведь инет магазин написали...

    • @Almas-2002
      @Almas-2002 4 роки тому

      @@DmitryAfanasyev это сложноо напиши плесс для чайников что можно было заголовки менять фотки статий и все такое напиши простой если можешь спасибо за ответ

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому +1

      @@Almas-2002 принято

  • @TheRedesc
    @TheRedesc 4 роки тому

    лайк неглядя, пока реклама цыкает!

    • @АнтонРевякин
      @АнтонРевякин 4 роки тому

      Adguard поставь расширение или их DNS поставь и не будет рекламы. Я вообще забыл, что на ютуб есть реклама)

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому +2

      И монетка мне не капнет за работу.

  • @Mr4iloveg
    @Mr4iloveg 4 роки тому +1

    Таков path

    • @nbrains6380
      @nbrains6380 4 роки тому +2

      Я все сказал! :)

  • @noname-nonaymich
    @noname-nonaymich 4 роки тому

    Превью интригует! Мандалорeц подождет, а Ларавел нет :))

  • @johnwick8332
    @johnwick8332 3 роки тому

    Вот и добрался почти до конца!)) хоть и пришлось по 2-3 раза пересматривать все видео. Спасибо вам Дмитрий за уроки.