Easynetq - чтение нескольких сообщений из RabbitMQ - PullRequest
1 голос
/ 04 апреля 2019

У меня есть решение, которое состоит из 3 сервисов, есть 2 очереди для передачи сообщений от одного сервиса к другому, и оно использует библиотеку EasyNetQ C # для подключения к RabbitMQ.

Это схема архитектуры:

  1. Получать данные из сети TCP (выполнить некоторую обработку), нажав на Очередь A
  2. Чтение из Очередь A (выполнить некоторую обработку), толчок к Очередь B
  3. Чтение из Очередь B , отправка обработанных данных в сторонний API

Сервисы 1 и 2 - это старые сервисы, в то время как 3 была введена недавно.

Дело в том, что 1 и 2 обрабатывают по одному журналу за раз, поэтому шаблон публикации / подписки имеет смысл, т. Е. Служба 1 получает одно сообщение и отправляет это одно сообщение в Очередь A для дальнейшей обработки, но Сервис 3 должен отправлять как можно больше сообщений стороннему API, так как API может принимать до 1000 сообщений в одном запросе HTTP POST.

Я думал о введении таймера, например. Каждые X минут таймер будет вызывать событие для чтения до 1000 сообщений из очереди и отправки их по HTTP в сторонний API, но я не могу найти способ вручную прочитайте N сообщений из очереди.

В данный момент я публикую сообщение из службы 2 в очередь B следующим образом:

_bus.Publish(myObject);

Тогда в 3-м сервисе у меня есть подписка

_bus.SubscribeAsync<XQueueDTO>("x_queue_processor", ProcessMessageAsync);

но эта подписка всегда будет читать по очереди одно сообщение из очереди.

Итак, как лучше всего с этим справиться?

1 Ответ

1 голос
/ 04 апреля 2019

Вы можете изменить настройки BasicQos, чтобы потребитель мог прочитать 1000 сообщений.Если это не решает вашу проблему, вы можете читать сообщения одно за другим, а когда счет достигает 1000, вы можете активировать логику Сервиса 3.

Edit # 1 : enter image description here

Ссылка: https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html

...