#spring-boot #microservices #spring-cloud #spring-cloud-feign #openfeign
#spring-boot #микросервисы #spring-облако #spring-cloud-feign #openfeign
Вопрос:
У меня есть следующие сервисы
Служба A — отправляет запрос в службу B с помощью RestTemplate.
Служба B — Имеет конечную точку, которая возвращает «Привет, Вселенная».
Сервис G — «Spring Cloud Gateway».
Служба A отправляет запрос службе B, используя URL API Gateway, используя шаблон REST.
Но как это работает с клиентом Feign? Например, ниже приведен клиент Feign для службы B в службе A
@FeignClient(name = "serviceb")
public interface ServiceBClient {
@GetMapping("/getmessage/")
public Inventory getInventoryDetails();
}
Я считаю, что одна из основных причин, по которой мы используем шлюз, заключается в том, чтобы разрешить службе A отправлять запрос на шлюз вместо прямого использования имени службы.
Но, похоже, с притворным клиентом цель уничтожена.
Как отправить запрос на шлюз с помощью клиента feign?
Комментарии:
1.
name
атрибутом должен быть serviceId шлюза.2. Пара указателей. 1) У вас возникнет конфликт имен, если у вас более двух FeignClients и все они имеют одинаковое имя 2) С помощью feign client мы копируем подписи методов. Не разрушит ли это назначение gateway, поскольку клиенту все еще необходимо выполнить некоторую работу, относящуюся к определенной службе?
Ответ №1:
если вы хотите указать URL API-gateway, вы можете указать его вместо имени службы. тогда запрос не отправляется в соответствующую службу, а запрос отправляется на шлюз API, и шлюз API перенаправит запрос в соответствующую службу. тогда API gateway будет занят ни за что. потому что, если вы указали имя службы, запрос напрямую переходит к запросу, используя данные IP-адреса кэшированных служб. из-за внутреннего запроса запрос также не хочет проходить через фильтры безопасности.
@FeignClient(url = "http://localhost:8081/order-service")