Как лучше всего координировать взаимодействие двух остальных служб, используя третий?

У меня есть 3 отдыхающих службы (ServiceA, ServiceB и ServiceC), которые обрабатывают 2 ресурса (ResourceA и ResourceB). Тип медиа ресурсов это приложение / hal + json.

  • ServiceA генерирует ResourceA;
  • ServiceB потребляет ResourceA и создает ResourceB;
  • ServiceC координирует создание ResourceB, получая ResourceA от ServiceA и отправляя его в ServiceB.

Я вижу в основном два способа организации этого взаимодействия.

  1. ServiceC в качестве прямого посредника ResourceA

    • ServiceC получает полный ResourceA от ServiceA
    • ServiceC отправить его в ServiceB
    • ServiceB возвращает ResourceB
  2. 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/ что снизит сетевые вызовы и улучшит производительность сервера.

Другие вопросы по тегам