Как настроить клиент Feign для работы с API Gateway?

#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")