Тёмный

Laravel Rabbitmq курс. Брокеры сообщения php laravel. php-amqplib в php и laravel 

Laravel Creative
Подписаться 17 тыс.
Просмотров 7 тыс.
50% 1

Стань спонсором(бусти аккаунт), доступ к собеседованиям:
boosty.to/laravelcreative
Мои платные курсы:
laravelcreative.ru/course
План развития с нуля до middle+:
laravelcreative.ru/other/plan
Группа вк:
laravelcreative
СОДЕРЖАНИЕ
00:00:00 Введение
00:01:08 Создаем проекты, устанавливаем amqplib и делаем настройки
00:09:30 Создаем publisher
00:14:33 Создаем consumer
00:18:00 Отправляем строку
00:22:37 Отправляем строку через свой обменник с привязкой к очереди
00:27:00 Отправляем массив
00:29:30 Прописываем параметры подключения в .env
00:32:43 Как в реальных проектах добавляют обменники, привязки и очереди

Опубликовано:

 

16 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 48   
@donlinoleum831
@donlinoleum831 Месяц назад
Ну это прям то, что доктор прописал! Спасибо за видео)
@disconnect3763
@disconnect3763 Месяц назад
Спасибо большое за видео. Очень интересно.
@palach_666
@palach_666 7 месяцев назад
Это самое лучшее что я видел, я посмотрел уроков 10 разных ничего никто нормально не объяснил. Тут и объяснили и пример показали, кароче топ, удачи в развитии канала Я подписан уже давно)
@cupuyc1989
@cupuyc1989 Месяц назад
Найс! Полезное видео :)
@dfkkg3453
@dfkkg3453 9 месяцев назад
Спасибо! Как всегда на высоте!
@laravelcreative
@laravelcreative 9 месяцев назад
Благодарю:)
@user-xd8wr2lv4t
@user-xd8wr2lv4t 8 месяцев назад
Спасибо за видео!)
@vimitali7630
@vimitali7630 9 месяцев назад
Огромное спасибо за продолжение! Очень вовремя!!! Даёшь продолжение :)
@laravelcreative
@laravelcreative 9 месяцев назад
Благодарю:)
@temka9719
@temka9719 9 месяцев назад
То, что надо!
@laravelcreative
@laravelcreative 9 месяцев назад
Благодарю:)
@user-cp8ou1ot5z
@user-cp8ou1ot5z 9 месяцев назад
Всё как всегда на высшем уровне! Единственное конечно, что не понятно, как запустить в супервизоре. погуглил, но так и не нашел.
@laravelcreative
@laravelcreative 9 месяцев назад
Благодарю:) Просто изучи тему supervisor как работает:) Там на 20 минут
@andreysokolov2335
@andreysokolov2335 9 месяцев назад
Отличное видео (и первое по Rabbit тоже). Спасибо за труд Хочу только уточнить по данным из Конфига и Env - в вашем случае данные берутся именно из конфига, а не из ENV. Чтобы брались из ENV надо в конфиге прописать 'host' => env('RABBITMQ_HOST')
@laravelcreative
@laravelcreative 9 месяцев назад
Да, забыл дописать:)
@Andrew-cl8xb
@Andrew-cl8xb 9 месяцев назад
Thanks a lot! 🙏
@laravelcreative
@laravelcreative 9 месяцев назад
Благодарю!:)
@igorsss5810
@igorsss5810 9 месяцев назад
А я посмотрел ваше видео с базой по Rabbitmq, ну думаю - надо бы где-то почитать, как это в связке с Laravel должно работать, а сегодня захожу на главную канала, а там... мааать честная 🙂
@user-sj6xz1mh3x
@user-sj6xz1mh3x 8 месяцев назад
Дякую!
@vxarlanchuk
@vxarlanchuk 9 месяцев назад
Ну просто гений на ютубере. Очень легко смотрится, все на наглядных примерах, кайф! Единственное, чего я не понял, это можно ли в реббит слать сообщения напрямую из javascript? (также, как мы это делаем в случае с REST, посредством ajax). Насколько я понял, он в основном предназначен для взаимодействия между серверными сервисами (backend to backend).
@user-bf7di7dt7q
@user-bf7di7dt7q 9 месяцев назад
Предлагаю автору ввиду его неоспоримой крутости открыть свое рекрутинговое it агентство) Я правильно понимаю что если consumer должен будет отдать какой-либо ответ то нужно сделать аналогичное обратное подключение? Брокер может использоваться только для подконтрольных сервисов или и для сторонних вроде почты или облака, если может то по какому принципу? Для углубления знаний о микросервисах было бы здорово реализовать небольшой проект с такой архитектурой в связке с брокером, чтобы как было сказано в одном из видео «все по взрослому»)
@laravelcreative
@laravelcreative 9 месяцев назад
Благодарю:) Брокер просто передает данные по очереди. Иначе говоря, это такой же http запрос в rest api, но "в очереди". Поэтому передать мы можем данные и указать кто их будет брать. И уже у него можно прописать будет ли обращение на сторону или еще что. И отдает не консумер, а у него можно дернуть другую консолку, которая сделает публикацию "ответа". Иначе говоря, логику публикации лучше в консумер не прокидывать.
@user-bf7di7dt7q
@user-bf7di7dt7q 9 месяцев назад
@@laravelcreative Для паблишера используется именно формат консольной команды? Получается что команда consume выступает в роли единой точки входа в api? А как быть дальше если сервис с бд например или ресурсный, редирект внутри api сервиса? В сообщении тогда нужно прописывать uri параметры и обратный адрес и как быть с запросами помимо гет? надеюсь все таки будет продолжение по rabbit) Вообще тема асинхронности очень интересна и ее практическая часть почти не освещена в интернете. Будет ли в дальнейшем контент по асинхронности, cqrs?
@dmitryvarnavskikh5648
@dmitryvarnavskikh5648 2 месяца назад
Не нашёл похожих вопросов в комментариях Допустим у нас 50 эндпоинтов апи в приложении и мы хотим внедрить раббит для целостности данных. Каждый эндпоинт, очевидно, реализует разную логику обработки данных. 1) Нам нужно для этого 50 очередей создать в раббите, которые будут висеть и ждать сообщений? 2) И как избежать конфликт имен очередей, если нам нужно одинаковую логику обработки делать, только в другом микросервисе? Ставить префикс имени микросервиса в названии очереди? Например такие очереди: 'mic1.addUser', 'mic2.addUser'. Получается так? 3) Создают ли новый обменник для каждого отдельного микросервиса, или все пихают в один? Интересно как на реальных проектах это работает ;) Спасибо)
@Seraf_
@Seraf_ 4 дня назад
Нашёл ответ?
@user-bk5ms4ss5b
@user-bk5ms4ss5b 4 месяца назад
Спасибо автору за курс. Хотел бы спросить, есть ли у кого-то опыт как сделать то же самое, только через докер?
@user-yf8if2qy5t
@user-yf8if2qy5t Месяц назад
Подскажите, чтобы использовать этот паке php-amqplib внутри docker конетейнеров он будет работать?
@midgardresident
@midgardresident 7 месяцев назад
Как обрабатывать сообщения из очереди? Добавлять их в другую очередь, из которой их заберет воркер этого микросервиса?
@eugaleksandr
@eugaleksandr 5 месяцев назад
Вопрос, а что это за подключение висит на консьюмере? Это лонг пуллинг или периодичные запросы?
@user-cp8ou1ot5z
@user-cp8ou1ot5z 9 месяцев назад
Брат, нужно сделать еще очередь, как ловить сообщения в очереди!!! Тема сисек не раскрыта полностью!!! Сделай продолжение! )))) Здоровье тебе и успехов в развитии канала!)
@laravelcreative
@laravelcreative 9 месяцев назад
Спасибо. О какой очереди речь? :)
@spitzer4077
@spitzer4077 9 месяцев назад
Заработало таки (не признавало is_open и версия ставилась 2.8).. попробовал запустить всё это в голой папке по композеру.json с "php-amqplib/php-amqplib": ">=3.0", так оно начало ругаться что не подключён php extension socket (никогда его не подключал), подключил, после чего ставилась уже не версия 2.8, а версия 3.5, на команду is_open уже не ругалось и работает всё как на видео.. до того был полный кошмар Норм видос, но всё-таки не хватает нескольких бестпракиксов на примере популярных прикладных задач с ларавелом...
@laravelcreative
@laravelcreative 9 месяцев назад
Благодарю:)
@user-bb1ew9ky7d
@user-bb1ew9ky7d 4 месяца назад
Если грубо сказать, то это чем-то напоминает веб-сокеты, когда есть канал, и при изменениях в канале - мы видим изменения?
@tyaplyap4842
@tyaplyap4842 7 месяцев назад
а как реализовать ретрай если обработка не удалась в консюмере
@PavelUlyanov
@PavelUlyanov 8 месяцев назад
Спасибо за видео! Все работает, но вот из очереди берет сразу все задания. Закинул 10к делаю запрос на получение и все 10к пропадают.... prefetch_count по разному пытался указывать, но ничего не меняется. Один из вариантов нагуглил такой: $channel->basic_qos(0, 2, true); // Устанавливаем prefetch_count равным 2
@user-qb8dl8ig7c
@user-qb8dl8ig7c 9 месяцев назад
Оставь куда тебе задонатить можно. Или карту или донейшн алертсы какие-то и их виды
@laravelcreative
@laravelcreative 9 месяцев назад
Можешь подписаться на бусти:)
@user-qb8dl8ig7c
@user-qb8dl8ig7c 9 месяцев назад
@@laravelcreative не дает он что-то
@webgeekstudio975
@webgeekstudio975 9 месяцев назад
Я так и не понял - нахера ты в env прописал - что бы ни где это не использовать?
@laravelcreative
@laravelcreative 9 месяцев назад
Что именно?
@webgeekstudio975
@webgeekstudio975 9 месяцев назад
30:48@@laravelcreative - о том как получить параметры подключения из env и в итоге тупо оттуда копируешь - не получая параметры из env. + проще обращается к конфигу через хелпер config('rabbitmq.host')
@user-fx8kx4jf8l
@user-fx8kx4jf8l 9 месяцев назад
​@@laravelcreativeну типа в папке config ты файл создал для rabbitmq, и всё равно данные захардкодил, а не из env файла берёшь. Забей, всё сделал хорошо)
@webgeekstudio975
@webgeekstudio975 9 месяцев назад
Да не критично, согласен, просто указал на недочет. Автор молодец..@@user-fx8kx4jf8l
@nurkhanzhaksylyk4133
@nurkhanzhaksylyk4133 9 месяцев назад
По стрелке видно что Consumer ссылается на queue (Документация во 2 разделе Work Queues). Соответственно можно создать еще 1 consummer который ссылается на ту же очередь указав такие же конфигурации. Пример: public function handle() { $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); $channel->exchange_declare('exchange_name', 'direct', false, true, false); $channel->queue_declare('queue_name', false, true, false, false); $channel->queue_bind('queue_name', 'exchange_name', 'user_key'); echo ' [*] Waiting for messages. To exit, press CTRL+C', " "; $callback = function ($msg) { echo ' [x] Received ', $msg->body, " "; $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); }; $channel->basic_qos(null, 1, null); $channel->basic_consume('queue_name', '', false, false, false, false, $callback); while ($channel->is_consuming()) { try { $channel->wait(); } catch (\Exception $e) { // Обработка ошибки (вывод сообщения или логирование) echo 'An error occurred: ' . $e->getMessage() . " "; } } $channel->close(); $connection->close(); }
@laravelcreative
@laravelcreative 9 месяцев назад
Благодарю:)
@vdbxxx
@vdbxxx 4 месяца назад
Есть $connection, есть непонятный $channel поверх $conection. Зачем эта вторая сущность? В конструкторе $channel разве нельзя прописать connection или в конструкторе connection создать полноценный объект channel? По типу, как сделано в других библиотеках: mysql_connect(): resource|false.
Далее
меня не было 9 дней
12:48
Просмотров 2,3 млн
Установка сервера RabbitMQ
1:29