Как лучше всего координировать взаимодействие двух остальных служб, используя третий?
У меня есть 3 отдыхающих службы (ServiceA, ServiceB и ServiceC), которые обрабатывают 2 ресурса (ResourceA и ResourceB). Тип медиа ресурсов это приложение / hal + json.
- ServiceA генерирует ResourceA;
- ServiceB потребляет ResourceA и создает ResourceB;
- ServiceC координирует создание ResourceB, получая ResourceA от ServiceA и отправляя его в ServiceB.
Я вижу в основном два способа организации этого взаимодействия.
ServiceC в качестве прямого посредника ResourceA
- ServiceC получает полный ResourceA от ServiceA
- ServiceC отправить его в ServiceB
- ServiceB возвращает ResourceB
ServiceC как косвенный посредник ResourceA
- ServiceC получает только ссылку на ResourceA на ServiceA (например, через заголовок Content Location при создании ResourceA)
- ServiceC опубликует эту ссылку на ServiceB (используя ссылку rel типа HAL)
- ServiceB напрямую получает полный ResourceA от ServiceA
- ServiceB возвращает ResourceB
Первый подход кажется "классическим", в то время как второй будет дешевле, поскольку существует только одна полная передача ResourceA (ServiceA -> ServiceB) вместо двух (ServiceA -> ServiceC -> ServiceB). В идеале, второй подход был бы лучше для достаточно большого ResourceA.
Есть ли проблема в использовании второго подхода? Считается ли это "анти-паттерном" или это не безопасно / не рекомендуется в некотором роде? Есть ли лучший шаблон взаимодействия?
1 ответ
Вы можете использовать любой подход. При втором подходе вы должны быть уверены, что ServiceA доступен из ServiceB. Если он доступен, то на самом деле я не могу угадать причину, по которой нам нужен совершенно отдельный сервис, т.е. ServiceC для координации. ServiceB может напрямую подписаться на события в ServiceA. Если вы планируете использовать какие-либо опросы, то вам стоит взглянуть на http://resthooks.org/ что снизит сетевые вызовы и улучшит производительность сервера.