У меня есть решение, которое состоит из 3 сервисов, есть 2 очереди для передачи сообщений от одного сервиса к другому, и оно использует библиотеку EasyNetQ C # для подключения к RabbitMQ.
Это схема архитектуры:
- Получать данные из сети TCP (выполнить некоторую обработку), нажав на
Очередь A
- Чтение из Очередь A (выполнить некоторую обработку), толчок к Очередь B
- Чтение из Очередь 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);
но эта подписка всегда будет читать по очереди одно сообщение из очереди.
Итак, как лучше всего с этим справиться?