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

Поделиться
HTML-код
  • Опубликовано: 9 сен 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

  • @kro480
    @kro480 3 года назад +2

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

  • @behemoth1621
    @behemoth1621 6 месяцев назад

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

  • @user-oo4ck9qx4o
    @user-oo4ck9qx4o Год назад +1

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

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

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

  • @user-cc6dg4he9v
    @user-cc6dg4he9v 3 года назад +1

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

    • @SergeiCalabonga
      @SergeiCalabonga  3 года назад

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

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

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

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

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

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

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

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

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

  • @artemignat7764
    @artemignat7764 2 месяца назад

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

    • @SergeiCalabonga
      @SergeiCalabonga  2 месяца назад +1

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

    • @artemignat7764
      @artemignat7764 2 месяца назад

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

    • @SergeiCalabonga
      @SergeiCalabonga  2 месяца назад

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

    • @artemignat7764
      @artemignat7764 2 месяца назад

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

    • @artemignat7764
      @artemignat7764 2 месяца назад

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