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
00:25 - определение цепочки задач; пример usecase`a ;
06:30 - алгоритм цепочки задач
06:40 - комманды в Laravel(урок?)
10:20 - AbstractJob
11:20 - GenerateMainCatalogJob - подробно о работе всей цепочки очередей
30:10 - "тестирование" работы очереди с "ошибкой"
Шут ква ква это топ
В бд есть заявка на генерацию документа.
1 job. По рест апи на сторонний ресурс отправляется запрос на генерацию документа.
2 job. На том же ресурсе запрашивается готовность, если изменился статус, то меняется статус в бд, если документ готов, то переходит к следующему джобу.
3 job. Выкачивает файлы на мой хостинг, меняет статус заявки.
4 job. Информирует клиента по почте о выполненной работе (с этим ещё предстоит разобраться).
Подключил супервизор, поигрался с таймингами. Работает стабильно и без моего присмотра.
Думаю теперь буду оплату делать похожим образом (это хорошая идея?).
Спасибо за отличный курс.
Я теперь понимаю свою жену, когда он ждала новую серию "Игры престолов".
Как только вышло новое видео сразу ищу время чтобы продолжить обустраивать "poligon".
Финальный босс оказался сложным
Благодарю
Ох. Я заглянула в это видео после ваших старых курсов. Качество-то как улучшилось!
И зовук наконец-то хороший.
Микрофон сменил 😎😷
а может ли быть подход структурирования папок вроде такого: ?
Есть основная папка "модуля" app/Blog/ в ней вложены её контроллер, обсервер, репозиторий, реквест и тп.
И так же другие "модули" app/Shop/.... app/Delivery/...
т.е. все файлы которые относятся к конкретному "модулю" все в его папке. Так можно делать? Или лучше как в курсе? Если можно, то какие + и - подходов, если есть таковые?
Спасибо.
Да, можно. Это, так сказать, первый шаг в кастомную модульность. Но лучше не придумывать велосипед и изучить уже существующие пакеты реализовывающие модульность для Laravel. Например Porto/Apiato.
@@DmitryAfanasyev Спасибо.
Дмитрий, очень срочно нужен ответ на вопрос: я создал цепочку джобов, но мне нужно на некоторые джобы в этой цепочке поставить делэй.
А вообще задача следующая: нужно отправить сообщения пользователю раз в 3 секунды (всего 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)
Еее я досмотрел курс! Теперь надо всю доку хотя бы просто прочитать и начну смотреть про шаблоны проектирования.
Поздравляю! 👍👍👍
Досмотрел. Все. Очень круто! Даст ли этот курс полное понимание? Нет. Но вместе с книгами (параллельно читал Стаффера М.) - огонь(книга суховата). Автор без ЧСВ - ответит, если вопрос не идиотский. Крепко рекомендую.
А почему такой задаче не подходит pipeline?
1. Как относишься к такому варианту, когда одна джоба запускается из другой? Это плохая практика? Потом не всегда получается отследить последовательность выполнения джоб.
2. Не сталкивался с таким? Была ситуация, когда в конфиге queue.php стоит retry after на 5 минут и при запуске командой artisan:queue также в параметрах 5 минут. Но по факту джоба выполняется 1 минуту и отваливается. Куда копать?
3. Используешь ли какой-нибудь UI инструмент для мониторинга, управления джобами? Например, чтобы руками перезапустить упавшие очереди?
4. Какой есть программный способ мгновенно остановить выполнение группы очередей? Например, есть 5 разных рассылок писем, которые запущены и нужно мгновенно остановить 1 из них. Проблема в том что все джобы одинаковые, отличаются только сериализованным объектом рассылки, который лежит в колонке payload
2) посмотри в php.ini максимальное время выполнения скрипта, либо в джобе укажи время
3)может horizon?
1) logger
2) retry_after вроде обсуждали в 53 или 52 видео, тебе нужен timeout
4) horizon вроде можно останавливать) ну либо php artisan queue:restart но опасная вещь)
@@NoNameUkr retry_after именно нужен, пауза между попытками. Но не работает ни то, ни другое. Более того, параметр php time limit написанный прямо перед длительным участком не даёт никакого эффекта, джоба всё равно через минуту идёт на повтор.
Но есть момент, всё добро работает в докере
@@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
как обычно хорошо рассказал и показал на примере! Было интересно посмотреть как работают цепочки очередей. Ни разу не приходилось с таким сталкиваться, но хоть в теории посмотрел! Здорово! Большое спасибо за такие уроки!
Спасибо за видео.
А как лучше сделать:
У меня есть контроллер, в нем я тяну данные их yml файла 10000 товаров и сохраняю.
Что мне сделать чтобы сначала взялись 100 товаров и сохранились, потом еще 100 и тд.
Порционально брать данные и кусками складывать в файл. С помощью очереди. Если произошел сбой - удаляем временный файл.
Здравствуйте, Дмитрий! Вот есть такой вопрос. Вот у меня есть тоже цепочка задач, с такими приоритетами(queue), как high и low. Если в таблице jobs есть хоть один high, то очередь не должна трогать low. И если мы используем такой метод как `release` то можем не трогать id что б он не перезаписывался. Можно ли такое реализовать?
А зачем?
Дмитрий, спасибо за курс. Хорошая подача, интересные примеры.
Спасибо за урок. Все доходчиво и просто)
А кто-нибудь сталкивался с тем, что очереди работают как будто бы через раз? Один раз отправил - ок, второй/третий не ок. Причём, когда не выполняются, они висят в редис как reserved
Случалось. Причин не нашел....
Спасибо вам за уроки Дмитрий! собираетесь ли вы снимать про ШИРОКОВЕЩАНИЕ В ЛАРАВЕЛ? если да ,то когда?)
Очень много всего хочется - всё упирается в свободное время...... Записал себе идею
@@DmitryAfanasyev спасибо большое,будем ждать!
Почитай про laravel echo server. Там достаточно просто
@@xym4uk ок, спасибо
Крутое видео. Жалко не рассмотрел, как в такой цепочке сделать общую "память". Понимаю, что вариантов 1000 и 1, но может есть какой-то каноничный. Спасибо, как всегда на высоте!
Что значит ОБЩАЯ ПАМЯТЬ?
Около 17 минуты говоришь, что маленькие скрипты хорошо выполнять. А какие могут быть проблемы/подводные камни при выполнении скриптов на 5+ минут?
Твой вопрос не понятен мне.
Спасибо за видео! Любое ваше новое видео жду больше Нового года.
Спасибо за классные уроки... донат еще не сделал но обязательно сделаю ты ДОСТОИН бро, большой респект тебе
Благодарю!
Объяснение топ !!!
Спасибо огромное за видео! Есть вопрос по задачам. Можно ли обратиться за консультацией и если можно то куда? :-)
Как минимум сюда. Если не я - то кто-нибудь из сообщества ответит
Ух ты, пример прям в тему, мне грядет подобный интегратор делать) (правда он может быть на симфони а не на ларе)
Пример из реальной жизни. Реализован был в августе 2019 работает как часы. Доработки проблем не доставляют.
Спасибо за ролики, Дмитрий
Спасибо, огромное)
Добрый день. Похоже, что эта проблема имеется только у меня ((( ...
В видео не показана нутрянка " GenerateGoodsFileJob", Сделал его по подобию остальных:
Код в точности соответствует коду из видео? Перепроверяли?
@@DmitryAfanasyev Прям не один раз всматривался и перепроверял ... просто именно эта джоба (GenerateGoodsFileJob) не была показана в видео и я ее додумывал сам ...
Это пустой класс отпачкованный от AbstractJob
А конструктор абстрактного джоба заполнен как в видео? Испльзуемые трейты так же на месте?
@@DmitryAfanasyev Да, Абстрактный джоб полностью слизал... вот он:
Подача стала еще круче!
Благодарю!
Напиши свой блог на чистом php плесс
Уже ведь инет магазин написали...
@@DmitryAfanasyev это сложноо напиши плесс для чайников что можно было заголовки менять фотки статий и все такое напиши простой если можешь спасибо за ответ
@@Almas-2002 принято
лайк неглядя, пока реклама цыкает!
Adguard поставь расширение или их DNS поставь и не будет рекламы. Я вообще забыл, что на ютуб есть реклама)
И монетка мне не капнет за работу.
Таков path
Я все сказал! :)
Превью интригует! Мандалорeц подождет, а Ларавел нет :))
Вот и добрался почти до конца!)) хоть и пришлось по 2-3 раза пересматривать все видео. Спасибо вам Дмитрий за уроки.
Благодарю за просмотр!