Я начинаю создавать шлюз API микросервисов и использую Spring Cloud Zuul, чтобы помочь мне с маршрутизацией. Но для некоторых вызовов API шлюза потребуется несколько запросов к разным службам.
Допустим, у меня есть 2 службы: Служба сведений о заказе и Служба доставки. Я хочу иметь конечную точку шлюза GET /orders/{orderId}, которая вызывает службу сведений о заказе, а затем службу доставки и объединяет их для возврата полных сведений о заказе с доставкой. Возможно ли это с помощью маршрутизации Zuul (может быть, фильтров?) Или мне нужно сделать это вручную (создать контроллер специально для таких запросов), используя что-то вроде RestTemplate для выполнения вызовов?
Вы можете избежать этого осложнения и перенаправить запрос от вашего Gateway
к Order service
, чтобы сделать заказ, а затем сделать запрос HTTP
от Order service
к Delivery service
, чтобы сделать доставку. По своей природе эти сущности работают так. И не беспокойтесь о скорости, это очень быстро.
Это, во-первых, в вашем случае, если вы хотите получить детали заказа с деталями доставки, это должно происходить таким же образом. Возможно, даже ваша служба заказов должна сохранять некоторые детали доставки в своей базе данных. Мы делали это так, вы должны избегать избыточных данных, но иногда это имеет смысл.
Есть смысл?
Да, это первая идея, которая пришла мне в голову, но я не хочу, чтобы сервисы так разговаривали друг с другом. Я хочу, чтобы они были отдельными.
Почему бы нет? У меня около 40 сервисов, они общаются через потоки HTTP или Kafka. Это нормально, они находятся в одной сети, и это быстро. @Д.Томов
Вы можете использовать фильтры маршрутов Zuul, см. cloud.spring.io/spring-cloud-netflix/multi/…