Я играл с приложением Spring Cloud, состоящим из сервера конфигурации, сервера обнаружения (Eureka) и клиента Feign с лентой (внутренне используемого Feign). У меня есть 2 службы, movie-service
и daily-update-service
. Цель состоит в том, чтобы обеспечить ежедневное обновление популярных фильмов, новостей и погоды в одном месте. У меня проблема в том, что клиент movie-service
Feign не может найти его в daily-update-service
. Выдает ошибку со следующим:
Caused by: java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: movie-service
daily_update_service_1 | at org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient.execute(LoadBalancerFeignClient.java:59) ~[spring-cloud-netflix-core-1.1.0.M4.jar:1.1.0.M4]
daily_update_service_1 | at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:95) ~[feign-core-8.12.1.jar:8.12.1]
daily_update_service_1 | at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:74) ~[feign-core-8.12.1.jar:8.12.1]
daily_update_service_1 | at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:54) ~[feign-hystrix-8.12.1.jar:8.12.1]
daily_update_service_1 | at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:294) ~[hystrix-core-1.4.21.jar:1.4.21]
daily_update_service_1 | ... 21 common frames omitted
daily_update_service_1 | Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: movie-service
daily_update_service_1 | at com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:468) ~[ribbon-loadbalancer-2.1.0.jar:2.1.0]
daily_update_service_1 | at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:184) ~[ribbon-loadbalancer-2.1.0.jar:2.1.0]
daily_update_service_1 | at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180) ~[ribbon-loadbalancer-2.1.0.jar:2.1.0]
Моя отладка показывает, что DomainExtractingServerList пытаюсь выполнить поиск с помощью VIP, который movie-service
, но серверов нет. Службы зарегистрированы в Eureka, и я вижу их на панели управления Eureka.
Я не уверен, какие фрагменты кода актуальны, поэтому публикую ссылку на проект Github. Предполагая, что у вас установлены Docker и Docker Compose, самый простой способ запустить его — клонировать проект, а затем следовать следующим инструкциям. Эти инструкции предназначены для ОС Mac/Linux, при необходимости адаптируйте их для Windows. Я предоставлю конкретные фрагменты кода, если кто-то захочет увидеть их здесь, а не искать в коде.
cd daily-update-microservices
.- Замените все вхождения моего IP-адреса узла докера своим. Вы можете использовать эту команду:
grep -rl '192.168.99.107' . | xargs perl -pi -e "s/192\.168\.99\.107/$(echo $DOCKER_HOST | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')/"
- Беги
./gradlew clean buildDockerImage
- Выполнить
docker-compose -f daily-update-service/docker-compose.yml up
. - Как только сервисы появятся, сделайте
curl -v http://$(echo $DOCKER_HOST | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'):10000/dailyupdate/movies/popular