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 в каждой конфигурации маршрута

Другие вопросы по тегам