Микросервис и RabbitMQ
Я новичок в Microservices и у меня есть вопрос с RabbitMQ / EasyNetQ. Я отправляю сообщения из одного микросервиса в другой микросервис.
Каждый микросервис является веб-API. Я использую CQRS, где мой командный обработчик будет получать сообщения из очереди и выполнять некоторую бизнес-логику. Чтобы вызвать обработчик, он должен сделать запрос к методу API.
Я хотел бы знать, без необходимости явного вызова конечной точки API, чтобы ударить код для потребления сообщений. Есть ли автоматизированный способ сделать это без необходимости вызова конечной точки API?
Предложение может заключаться в создании отдельного решения, которое будет представлять собой консольное приложение, которое будет выполнять RabbitMQ, чтобы начать прослушивание. Создайте цикл while для чтения сообщений, затем вызывайте конечную точку веб-API для обработки бизнес-логики каждый раз, когда новое сообщение отправляется в очередь.
Моя цель состоит в том, чтобы создать прослушиватель или задачу запуска, при которой, как только сообщения попадают в очередь, они автоматически выбирают их из очереди и продолжают с обработчиком команд, но не уверены, как сделать "автоматический" способ, как я его описываю. Я думал об использовании Azure Webjob, который будет работать постоянно и будет выступать в роли потребителя.
Ищете хороший архитектурный способ сделать это.
Используемый язык программирования - C#
Очень признателен
3 ответа
Рекомендуемый способ размещения подписчика RabbitMQ заключается в написании службы Windows с использованием чего-то вроде библиотеки верхнего уровня и подписке на события шины внутри этой службы при ее запуске. Мы сделали это в нескольких проектах без проблем.
Если вы используете Azure, лучшее место для размещения подписчика RabbitMQ - это "Рабочая роль".
Я думаю, что при использовании шаблона CQRS у вас будут и события, и соответствующие обработчики событий. Поскольку вы используете RabbitMQ для асинхронной связи между командой и запросом, то любое сообщение, помещенное на определенный канал в RabbitMQ, может быть прослушано методом обратного вызова.
Получение сообщений из очереди является более сложным. Он работает, подписав функцию обратного вызова в очередь. Всякий раз, когда мы получаем сообщение, эта функция обратного вызова вызывается библиотекой Pika.
Я использую CQRS, где мой командный обработчик будет получать сообщения из очереди и выполнять некоторую бизнес-логику. Чтобы вызвать обработчик, он должен сделать запрос к методу API.
Вы уверены, что это настоящий CQRS? CQRS возникает, когда вы обрабатываете запросы и команды по-разному в вашей доменной логике. Получение сообщения через Calss, которое называется Command Handler, и просто реагировать на него еще не CQRS.
Моя цель состоит в том, чтобы создать прослушиватель или задачу запуска, при которой, как только сообщения попадают в очередь, они автоматически выбирают их из очереди и продолжают с обработчиком команд, но не уверены, как сделать "автоматический" способ, как я его описываю. Я думал об использовании Azure Webjob, который будет работать постоянно и будет выступать в роли потребителя. Ищете хороший архитектурный способ сделать это.
Чем проще это сделать, тем лучше. Не ищите сложные решения, пока не опробуете все простые. Когда я реализовывал нечто подобное, я просто запускал пул сценариев обработчиков сообщений, используя Linux cron. Обработчик вытолкнул сообщение из очереди, обработал его и завершил работу. Просто.