#java #spring #spring-boot #microservices #api-gateway
#java #весна #весенняя загрузка #микросервисы #api-шлюз
Вопрос:
У меня есть два микросервиса: микросервис пользователя и микросервис заказа.
Микросервисы пользователя возвращают данные пользователя, а микросервисы заказа возвращают данные заказа для пользователя.
http://localhost:8080/microservice1/getuser
{«id»: «100»,»name»:»test»}
http://localhost:8081/microservice2/getorders
{«идентификатор пользователя»: «100», «заказы»:{«orderid»: «5001», «productname»: «мобильный телефон»}}
Я использую Spring cloud Zuul в качестве шлюза API, который направляет запрос к каждой микросервисе.
http://localhost:9090/api/microservice1/getuser
http://localhost:9090/api/microservice2/getorders
Теперь из пользовательского интерфейса мне нужно вызвать две конечные точки
Есть ли у них какой-либо способ объединить ответы обеих микросервисов, таких как {«id»: «100», «name»: «test», «orders»:{«orderid»: «5001», «productname»: «mobilephone»}}
Так что клиенту нужно вызвать только одну конечную точкуhttp://localhost:9090/api/getdetail
как мы можем достичь этого на уровне API Gateway?
Ответ №1:
Zuul не следует использовать для агрегирования ответа, вы можете создать службу микросервиса оркестровки и внутренне, используя RestTemplate, получить весь ответ и агрегировать в соответствии с потребностями.
Сохраняйте Zuul как состояние без состояния, шлюз не должен иметь никакой логики или состояния.
Комментарии:
1. спасибо @vaquar Khan, В третьей микросервисе оркестровки, как отправить одновременный запрос, можем ли мы использовать реактивный подход или традиционный подход, например, отправить один запрос и дождаться другого
2. Если вы хотите отправить консолидированный ответ, тогда должен быть вызов синхронизации, если вы хотите сбросить запрос или ответ в db или rabbit / kafka, затем используйте асинхронный вызов. Реактивный лучше всего, если поддерживается ваша инфраструктура.