Среда
- Spring Boot
1.5.13.RELEASE
- Spring Cloud
Edgware.SR3
- Java 8
Конфигурация
- Клиент Eureka включен и работает правильно (я проверил и все работает, как я ожидаю).
Некоторые соответствующие свойства из моей конфигурации:
feign.hystrix.enabled=true
eureka.client.fetch-registry=true
spring.cloud.service-registry.auto-registration.enabled=true
service1.ribbon.listOfServers=https://www.google.com
Контекст
У меня есть приложение, которое общается с 3 другими службами с помощью симулированных клиентов.Два из них обнаружены с помощью службы Eureka.Они работают хорошо.Последний сервис является внешним с одним статическим именем хоста, и я не хочу, чтобы это разрешалось через Eureka.Поскольку я хочу, чтобы Eureka использовалась для двух из этих служб, я бы хотел, чтобы Eureka была включена.
Вопрос
В качестве окончательной услуги я попытался добавить service1.ribbon.listOfServers=https://www.google.com
к application.properties
, однако в этом случаеследующая ошибка во время выполнения при вызове симулированного клиента:
Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [] вызвала исключение [Ошибка обработки запроса;Вложенное исключение - com.netflix.hystrix.exception.HystrixRuntimeException: Service1Client # test () не выполнен и откат недоступен.] с первопричиной priceing_1 |цена_1 |com.netflix.client.ClientException: у балансировщика нагрузки нет доступного сервера для клиента: service1 pricing_1 |at com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer (LoadBalancerContext.java:483) ~ [ribbon-loadbalancer-2.2.5.jar! /: 2.2.5]
Мой клиент настроен следующим образом:
@FeignClient("service1")
public interface Service1Client {
@GetMapping(value = "/")
String test();
}
Заранее благодарим за любые советы.
Рассмотрение
Поскольку дух Ribbon, как я понимаю, заключается в том, чтобы действовать в качестве балансировщика нагрузки на стороне клиента и учитываяв моем случае нет ничего для балансировки нагрузки (у меня есть одно фиксированное статическое имя хоста, которое возвращает одну запись A в DNS).Лента на самом деле кажется ненужным компонентом - я действительно хотел клиента Feign, поскольку мне нравится тот факт, что он абстрагирует HTTP-запрос более низкого уровня и разделение объектов.Поэтому я полагаю, что альтернативный дополнительный вопрос заключается в том, могу ли я использовать симуляцию без ленты - похоже, что из коробки можно использовать ленту - даже Javadoc аннотации @FeignClient
говорит:
Если лента доступна, она будет использоваться для балансировки нагрузки внутренних запросов, а балансировщик нагрузки может быть настроен с использованием @RibbonClient
с тем же именем (то есть значением), что и для симулированного клиента.
Предполагая, что оба они тесно связаны, даже если они служат разным целям.