Микросервисы: MassTransit PubSub

Поділитися
Вставка
  • Опубліковано 30 вер 2024
  • В этом видео я покажу как можно построить общение между микросервисами при помощи паттерна PubSub/Subscribe. Для коммуникаций я буду использовать MassTransit (RabbitMQ). Микросервисная архитектура буду строить на платформе ASP.NET Core 3.1.
    Перед собой я ставлю следующие задачи:
    * Создать уведомление для микросервисов Warehouse и Configuration о том, что новый пользователь (ApplicationUser) успешно зарегистрирован в системе.
    * Указанные выше сервисы должны получить информацию об идентификаторе пользователя, а также фамилию и имя
    * Для коммуникации использовать MassTransit (RabbitMQ).
    * Применение паттерна Saga не требуется.
    10 простых шагов для достижения цели:
    1. [02:32] Создание микросервисов для
    * Organization API (IdentityServer Module)
    * Warehouse API (Module)
    * Configuration API (Module)
    2. [06:27] Настройка подключения к базе данных
    * Organization API (IdentityServer Module)
    * Warehouse API (Module)
    * Configuration API (Module)
    3. [14:21] Создание nuget-пакета Contracts (локально)
    4. [17:33] Настройка RabbitMQ для подключений
    5. [18:28] Установка nuget-пакетов для Masstransit
    6. [19:55] Подключения к RabbitMQ (Gist)
    7. [24:49] Создание контракта для коммуникации в сборке контракт
    8. [27:48] Создание и регистрация подписчиков (Consumer) в Configuration и Warehouse
    9. [35:09] Публикуем событие о регистрации
    10. [44:00] Конфигурирование подписчика
    ключевые понятия:
    #микросервисы,#коммуникации,#microservices,#communications,#MassTransit,#RabbitMQ,#PubSub,#Publish,#Subscribe,#aspnetcore,#Template,#Framework,#nuget
    Ссылки:
    PubSub паттерн
    en.wikipedia.o...
    Saga (Long-running transaction)
    en.wikipedia.o...
    Nimble Framework
    github.com/Cal...
    Шаблон
    gist.github.co...
    Благодарности и помощь каналу принимаются:
    www.calabonga....

КОМЕНТАРІ • 20

  • @metlic5209
    @metlic5209 2 роки тому +2

    У меня кровь из глаз потекла от конструктора AccountService. Зачем это было писать, да еще в "шаблон" заворачивать. Повторять архитектурною мантру вовсе не означает понимать ее.

  • @audiofield2159
    @audiofield2159 Рік тому

    Если пробовать с x.AddConsumer(_ => new ApplicationUserCreatedConsumerDefinition()); то сообщение продолжает приходить только одному из консбюмеров. Если использовать x.AddConsumer(typeof(ApplicationUserCreatedConsumerDefinition)); то приходит всем

  • @behemoth1621
    @behemoth1621 7 місяців тому

    Добрый день!Материал супер! Спасибо! Нашел ошибочку в классе конфигурации на git. Имя переменной должно быть с маленькой буквы. Иначе получается что переменной Configuration нет в контексте. Картиночку увы не вставлю.
    public static void ConfigureServices(IServiceCollection services, IConfiguration configuration)
    {
    var massTransitSection = Configuration.GetSection("MassTransit");
    var url = massTransitSection.GetValue("Url");

  • @АртемКолесов-д8е

    Добрый вечер! Среди ваших замечательных уроков вроде бы нет кафки. Планируется ли контент по ней?

  • @ОлегДаниленко-ч1ж
    @ОлегДаниленко-ч1ж 3 роки тому +1

    Спасибо вам за материал. У меня остался один вопрос по поводу очередей. У меня для каждого Consumer'а должна быть своя очередь? Т.е. если у меня будет потребителей больше, чем очередей, то получается не все сообщения будут доставлены до всех потребителей. Я пробовал отсылать сообщения двум Consumer'ам, у меня они распределялись поровну между ними (отправляю 10, каждый сервис получает по 5)

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

      Спасибо за комментарий. Попробую ответить крако. Всё зависит от типа сообщений. Есть тип "Comnand", а есть тип "Event". Это негласное правило разделения, но работает оно так.
      1 .Command - получает один потребитель (если потребителей много - включается режим "Load Balancy") и доставка гарантируется.
      2. Event - получают все потребители и доставка не отслеживается (это и есть PubSub)

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

    Спасибо, очень полезно!

  • @audiofield2159
    @audiofield2159 Рік тому

    Спасибо за видео! А у вас случаем не было опыта реализации диспетчера процессов на MassTransit, Saga и RabbitMQ ? Например для обработки всяких там заявок на ипотеки, кредиты, осаго и т.п.

    • @SergeiCalabonga
      @SergeiCalabonga  Рік тому

      На канале есть примеры

    • @audiofield2159
      @audiofield2159 Рік тому

      @@SergeiCalabonga а можете носом ткнуть пожалуйста :) так сходу не нашел

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

    Есть микросервисы корзина и продукты. Чтобы добавить продукт или создать корзину, паблишером должно быть фронтенд приложение, например mvc?

    • @SergeiCalabonga
      @SergeiCalabonga  3 місяці тому +1

      Frontend - тоже может быть микросервисом.

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

      @@SergeiCalabonga Ок. Микросервисы Product и Cart. Добавляем продукт в корзину. Это значит Cart паблишер, запрашивает продукт из консьюмера Product. У Product есть ещё консьюмеры на создание и удаление продукта (для своей базы данных). Создаю ещё один микросервис который выполняет эти запросы?

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

      @@artemignat7764 интересно, а "паблишер", "консьюмер" - это что за звери? Может всё-таки или до конца по-русски "публикатор" и "потребитель", или до конца по-английски "publisher" и "consumer"? Читать очень сложно, да и не красиво, простите. Англицизмы меня сбивают с толку. :(
      А если по делу, то....
      1. правила, которыми вы руководствуетесь для создания новых сервисов мне не понятно.
      2. Какие обязанности на сервисе Product? Пред положу, что это каталог товаров.
      3. Какие обязанности на сервере Cart? Если Product - это каталог товаров.
      4. Почему это два разных сервиса? (Вам скучно было с одиним,)

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

      @@SergeiCalabonga Product -сервис каталога товаров. В нём я могу продукт добавлять, удалять, редактировать. Сервис Cart может добавлять продукт, путям обращения к Product и удалять продукт и корзины. На уровне crud запросов, я понимаю как эти сервисы общаются между собой. И понимаю как Cart может получить продукт от Product через MassTransit. Но я не понимаю как мне реализовать три действия: добавление,удаление,редактирование продукта в Product с помощью MassTransit с брокером. Я должен ещё создать микросервис для этого?

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

      @@SergeiCalabonga Product - сервис каталога товаров. Сервис Cart может добавлять и удалять продукт.Он обращается к Product, только для получения продукта через MassTransit.В сервисе Product можно продукт добавлять,удалять,редактировать. Это делается админом через crud запросы к api сервиса Product. То что я описал, считается микросервисной архитектурой или же нужно создавать ещё один микросервис который будет делать эти запросы через MassTransit?