Zuul ошибка пересылки
Я сталкиваюсь с проблемами, используя Zuul и Ленту. Я использую также Eureka для микросервисного реестра.
- У меня есть ленточный сервис (порт 9000), взаимодействующий с пользовательским сервисом с помощью REST API
- Пользовательский сервис имеет 2 экземпляра (через порт 8081 и 8091)
- на ленточном сервисе я реализовал балансировку нагрузки на стороне клиента с помощью Hystrix и симулированного клиента
- Я использую API службы ленты, используя маршрут Zuul, и этот API затем запускает API службы пользователя.
Когда я запускаю свою микросервисную экосистему и пытаюсь использовать API-интерфейс ленточного сервиса (zuulservice:8761/ribbon-service/), я получаю следующую ошибку:
com.netflix.zuul.exception.ZuulException: ошибка пересылки в org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:189) ~[spring-cloud-netflix-zuul-2.0.0.RELEASE.jar:2.0.0.RELEASE] at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:164) ~[spring-cloud-netflix-zuul-2.0.0.RELEASE.jar:2.0.0.RELEASE] at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:112) ~[spring-cloud-netflix-zuul-2.0.0.RELEASE.jar:2.0.0.RELEASE] на com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:117) ~[zuul-core-1.3.1.jar:1.3.1] на com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:193) ~[zuul-core-1.3.1.jar:1.3.1] на com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:157) ~[zuul-core-1.3.1.jar:1.3.1] на com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:118) ~[zuul-core-1.3.1.jar:1.3.1] на com.netflix.zuul.ZuulRunner.route(ZuulRunner.java:96) ~[zuul-core-1.3.1.jar:1.3.1] на com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:116) ~[zuul-core-1.3.1.jar:1.3.1] на com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:81) ~[zuul-core-1.3.1.jar:1.3.1] в org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:165) [spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] в org.springframelix.uld.net.web.ZuulController.handleRequest(ZuulController.java:44) [spring-cloud-netflix-zuul-2.0.0.RELEASE.jar:2.0.0.RELEASE] в org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter. (SimpleControllerHandlerAdapter.java:52) [spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] в org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) [spring-webmc) 5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) [spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]................ Вызвано: com.netflix.client.ClientException: у балансировщика нагрузки нет доступного сервера для клиента: ленточный сервис на com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:483) ~[ribbon-loadbalancer-2.2.5.jar:2.2.5] на com.netflix.loadbalancer.reactive.LoadBalancerCom.call(LoadBalancerCommand.java:184) ~[ribbon-loadbalancer-2.2.5.jar:2.2.5] в com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180) ~[ribbon-loadbalancer-2.2.5.jar:2.2.5] в rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.8.jar:1.3.8] в rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94) ~[rxjava-1.3.8.jar:1.3.8] в rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42) ~[rxjava-1.3.8.jar:1.3.8] в rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.8.jar:1.3.8]
Эта ошибка сохраняется в течение некоторого времени, и после этого я получаю следующий вывод:
2018-07-16 12: 55: 43.260 ИНФОРМАЦИЯ 19233 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty: свойство перелистывания: ribbon-service.ribbon.ActiveConnectionsLimit для использования свойства NEXT: niws.loadbalancer.availabilityFilteringRuleimitactivenections = 2147483647
После этого выхода все снова работает отлично.
Когда я нажал на eurekaservice:8765/eureka/apps, я зарегистрировал как ленточный сервис, так и все экземпляры пользовательского сервиса.
Это мой сервис приложения zuul.properties:
> #Service port
server.port=8765
#Service port
spring.application.name=zuul-service
# Discovery Server Access
eureka.client.service-url.defaultZone:http://localhost:8761/eureka/
eureka.instance.lease-renewal-interval-in-seconds=3
#User service configuration
zuul.routes.user-service.path:/user-service/**
zuul.routes.user-service.serviceId:user-service
#Product service configuration
zuul.routes.product-service.path:/product-service/**
zuul.routes.product-service.serviceId:product-service
#Product service configuration
zuul.routes.shoppingcart-service.path:/shoppingcart-service/**
zuul.routes.shoppingcart-service.serviceId:shoppingcart-service
#Product service configuration
zuul.routes.payment-service.path:/payment-service/**
zuul.routes.payment-service.serviceId:payment-service
#Product service configuration
zuul.routes.ribbon-service.path:/ribbon-service/**
zuul.routes.ribbon-service.serviceId:ribbon-service
Это мой zuul-сервис bootstrap.properties:
> #Application name
spring.application.name=zuul-service
#hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 12600
ribbon.ConnectTimeout: 6000
ribbon.ReadTimeout: 60000
robbon.eureka.enabled: true
hystrix.command.default.execution.timeout.enabled=false
Я пользуюсь весной 2.0.1 и весенним облаком Finchley.RELEASE.
Может кто-нибудь объяснить, что происходит?
Спасибо!
1 ответ
Путь DiscoveryClient
работает, что он получает новый список изменений из Eureka
(Обнаружение службы) для каждого определенного периода времени hearbeat
, До тех пор, пока новые изменения в отношении зарегистрированных приложений не распространятся от обнаружения службы к вашему экземпляру Zuul, у него обязательно будут ошибки.
Вывод, который вы видите в журналах, является лишь подтверждением того, что он получил эту информацию.
Вы можете рассмотреть возможность добавления конфигурации полосы пути для вашей конфигурации zuul.
добавить stripPrefix=false в каждой конфигурации маршрута