WebApi в Net Core с использованием RabbitMQ

Я очень новичок в RabbitMQ World и архитектуре микросервисов. Я просмотрел несколько руководств по использованию rabbitMQ на YouTube, но я хотел бы задать несколько вопросов.

1.) Если клиент отправляет данные моему контроллеру api, а мой контроллер api публикует данные в очереди, каков правильный способ ответить на почтовый запрос, пока данные обрабатываются на rabbitMQ? Потому что из учебника он просто возвращает «Ok (Http Code 200)», даже если данные еще не завершены.

2.) Может ли потребитель подписаться на более чем 1 очередь? Если да, то есть ли образец конфигурации на startup.cs?

3.) Есть ли какой-нибудь пример использования rabbitMQ на .NetCore для случаев "реального мира"? Пожалуйста, дайте мне знать.

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Совершенно нормально вернуть 200. Это лишь один из многих компромиссов для архитектуры микросервисов. Например. с точки зрения производительности, эффективно, если вы можете вернуться раньше с 200 и распространить все изменения асинхронно через остальную часть распределенной системы. С другой стороны, он добавляет еще один тип сложности, который вам необходимо принять - конечную согласованность. Эта концепция как бы описывает то, о чем вы спрашивали. Допустим, ваш клиент получил 200, но если он немедленно вызывает другой микросервис, клиент может не увидеть изменений, внесенных предыдущим запросом, потому что существует вероятность того, что изменения еще не распространены. Вам нужно решить, приемлемо это в вашем проекте или нет. Если нет, возможно, вам следует изменить способ разделения бизнес-домена на микросервисы, пытаясь сгруппировать транзакционно близкие друг к другу объекты вместе, чтобы смягчить такие проблемы. Если вы действительно не можете терпеть конечную согласованность, возможно, вам следует отказаться от микросервисов для конкретного проекта.

  2. Да, это возможно, вы могли бы, например, создать реализацию IHostedService для каждой очереди, прослушивающей сообщения, и запускать их параллельно с вашим основным приложением asp net, зарегистрировав их в starutp.cs

  3. Вы найдете это в репозитории по ссылкам ниже. Они используют RabbitMQ. Хотя есть небольшая абстракция, которая может усложнить понимание, это отличная реализация с бонусом в виде документации в бесплатной электронной книге.

https://github.com/dotnet-architecture/eShopOnContainers/ - Я не могу не подчеркнуть, как этот репозиторий помог мне в понимании микросервисов. Также есть бесплатная электронная книга от Microsoft docs об этом репо: https://docs.microsoft.com/en-us/dotnet/architecture/microservices/. Они касаются таких понятий, как конечная согласованность и асинхронная коммуникация. Это именно то, что вы ищете.

Привет, Михал, спасибо за ответ. Отметил № 1 и № 3. Спасибо, что поделились ссылкой. Для №2 не могли бы вы создать код? заранее спасибо

Antonius Bayu 06.04.2021 13:11

Другие вопросы по теме