Вы использовали Zuul (который знает microservices адрес через Eureka) направить запрос между вашим microservices? если это так, вы используете шаблон балансировки нагрузки на стороне сервера.
Если вы используете службу обнаружения (Eureka в вашем случае), я думаю, что лучший подход заключается в использовании шаблона балансировки нагрузки на стороне клиента для всех запросов между службами (внутри вашей системы). (для этого вы можете использовать Ribbon или RestTemplate).
Вы можете использовать Zuul как единую входную дверь вашей системы, которая позволяет браузеру, мобильному приложению или другому пользовательскому интерфейсу использовать службы с нескольких хостов без управления совместным использованием ресурсов (CORS) и аутентификацией для каждого из них.
Например: запрос клиента (мобильного приложения) для всех комментариев к изображению. Клиент не должен знать адрес «Комментарии-сервис». Требуется только адрес прокси-сервера, и Зууль отправит запрос на нужную услугу. Вы можете сделать это в application.yml/.properties
по
zuul.routes.comments.path=/comments/**
zuul.routes.comments.service-id=comments
Запрос будет GET www.myproxy.mycompany.com/comments
. Не забывайте, что имя службы в вашем application.yml/.properties
очень важно (spring.application.name
). Это идентификатор службы на маршрутах Зууль (который является тем же идентификатором в Эврика).
По какой-то причине вашей системе необходимо запросить внешние службы (как вы отметили в 3-й ноте). В этом случае ваши внешние службы не являются клиентом обнаружения, Zuul не может искать идентификатор службы от Eureka. использовать маршруты,
zuul.routes.currencyprovider.path=/currencies/**
zuul.routes.currencyprovider.url=https://currencies.net/
с этим маршрутом, все /currencies/**
запросов от ваших услуг ЧЕРЕЗ Zuul будут сделаны. с таким подходом у вас есть одна дверь для всей вашей системы. Это API Gateway pattern.
Иногда вашей системе необходимо агрегировать несколько результатов от разных служб для ответа на запрос клиента. Вы можете сделать это в прокси (Zuul в вашем случае).
Hi redoff, Спасибо за ответ. у него больше информации, чем мне нужно :). У меня есть еще один вопрос. если я использую службу обнаружения (балансировку нагрузки на стороне клиента), есть ли какое-то преимущество, позволяющее zuul маршрутизировать запросы на основе имени службы Vs, явно настраивая пути? – Harish
, когда вы используете службу обнаружения, вы не подразумеваете использование балансировки нагрузки на стороне клиента. это коммуникационный подход между вашими службами, которые определяют, является ли он серверным или клиентским LB. Преимущество использования сконфигурированных путей заключается в том, что вы можете ограничить доступ только для определенных сервисов с помощью маршрутов (сконфигурированных путей) ** ЕСЛИ ТОЛЬКО ** вы добавляете 'zuul.ignored-services = *'. Пример – redoff
: у вас есть 3 услуги (комментарии, пользователи, показатели). Вы хотите ограничить доступ ** THROUGH ** прокси до 1 услуги (например, службы комментариев). вы обрабатываете как: 'zuul.ignored-services = *' и 'zuul.routes.comments.path =/comments/**' 'zuul.routes.comments.service-id = комментарии'. С помощью этой строки свойств все запросы ** THROUGH ** прокси будут отклонены, за исключением 'www.myproxy.mycompany.com/comments' – redoff