Я пишу брокер сообщений, который подключается к IBM MQ и папкам в файловой системе. После сбора сообщений он затем материализует их в строго типизированные классы и подключает их к RX Subjects.
Я повысил осведомленность о сообщениях, которые позволяют мне определить, какие внешние системы должны быть затронуты для их обработки, поэтому я могу выполнять запросы к наблюдаемым RX и выбирать сообщения, которые не нацелены на внешнюю систему, и т. д.
Что я хочу сделать дальше, это дросселировать сообщения от внешней системы, например:
Если бы я попадал в CRM-систему с сообщением определенного типа, и я бы решил, что хочу поразить эту систему максимум 4 одновременными вызовами, я бы обрабатывал только 4 сообщения за раз, если бы у меня было 5-е сообщение, я бы нужно дождаться завершения одного из предыдущих 4, а затем перейти к 5-му. То же самое для других типов ресурсов, таких как внешние базы данных, другие внешние веб-сервисы и т. д.
Я начал исследовать этот вопрос, и до сих пор лучшим подходом к проектированию было бы написать собственный планировщик. Недостатком является то, что мне пришлось бы писать свои собственные внутренние структуры, которые помещают сообщения в очередь внутри планировщика после их получения, и именно здесь мне не нравится такой подход.
У кого-нибудь есть лучший способ сделать это?