У меня есть служба (ServiceA) с конечной точкой, на которую клиент может подписаться, и после подписки эта служба непрерывно генерирует данные, используя отправленные сервером события.
Если это важно, я использую Project Reactor с Java.
Это может быть важно, поэтому я объясню, что делает эта конечная точка.Каждые 15 секунд он извлекает данные из другой службы (ServiceB), проверяет, были ли какие-либо изменения в данных, которые он получил 15 секунд назад, и, если они были, создает новое событие с этими данными, если изменений не было, он неотправить что-нибудь (поэтому полезная нагрузка для клиента будет как можно меньше).
Теперь в этом приложении может быть подключено несколько клиентов одновременно, и все они запрашивают одни и те же данные - они не фильтруются пользователем и т. д..
Разумно ли, что эта наблюдаемая производящая продукция распределяется между несколькими клиентами?
Конечно, это избавит нас от множества ненужных звонков в ServiceB, но мне интересно, есть ли какие-либо противопоказания к этому подходу - я впервые пишу реактивную программу на бэкэнде (исходя изRxJS), и я не знаю, вызовет ли это какие-либо проблемы с параллелизмом или какие-либо другие проблемы.
Другое преимущество, которое я вижу, состоит в том, что новому клиентскому соединению немедленно будут предоставлены последние полученные данные отServiceB (для получения этих данных обычно требуется около 4 секунд на вызов).
Мне также интересно, возможно ли, чтобы эта наблюдаемая вызывала ServiceB, только если есть какие-то абоненты - т.е. до тех пор, пока есть хотя бы одинабонент, позвоните в службу, если нет подписчиков, перестаньте звонить ей, когда новый подписчик позвонит, позвоните еще раз, но сначала получите клиенту последние извлеченные данные (независимо от того, насколько они устаревшие или устаревшие).