Циклические API-вызовы в микросервисах - PullRequest
0 голосов
/ 21 января 2019

Предположим, есть две службы,

  1. Сервис продуктов
  2. Купонный сервис

Купон помечен как товар. И когда купон изменяется для любого продукта, происходит вызов API от сервиса продукта к сервису купона, который рассчитывает скидку купона и отправляет обратно в сервис продукта. И сервис продукта поддерживает этот кеш. Однако для расчета скидки купонному сервису требуется информация о продукте, такая как категория продукта, тип SKU и т. Д., И скидка зависит от этого, поэтому снова возникает вызов API для сервиса продукта, который делает его циклическим вызовом. Есть пара решений,

  1. поддерживать кэш продуктов в сервисе купонов. - Это накладные расходы, поскольку нам необходимо поддерживать кэш при каждом обновлении поля продукта, и это не то решение, которое мы ищем.
  2. Когда служба продукта выполняет API-вызов для службы купонов, отправьте все необходимые поля - в этом подходе существует тесная связь.

Как правильно решить эту проблему?

1 Ответ

0 голосов
/ 21 января 2019

Если вы решили, что для этого вам нужны 2 разные службы, я бы согласился, что циклическая зависимость является чем-то плохим и стоит попытаться ее удалить.

Однако я не вижу в этом необходимости. Я думаю, что услуга «купон» должна знать об услуге «продукт», но не наоборот.

Однако проблема, с которой вы столкнулись, заключается в том, что ваш купонный сервис должен реагировать на изменения, происходящие в сервисе продукта. Прямо сейчас вы решили эту проблему, отправив сообщение в службу купона.

Некоторые возможности исправить это включают:

  1. Служба купонов периодически запрашивает обновления.
  2. Развертывание системы pub-sub. Внесите «изменение продукта», на которое вы можете подписаться, и купон на него будет подписан.

Я бы предложил третий вариант. Мне кажется, что «смена купона» как концепция вообще не должна существовать в сервисе продукта. Почему это? Похоже, у вас на самом деле может быть 3 разных сервиса:

  1. Информация о продукте
  2. Информация о купоне
  3. Корзина
...