Zuul转发错误



我在使用Zuul和Ribbon时遇到问题。我也在使用Eureka进行微服务注册。

  • 我有ribbon-service(端口9000)使用REST API与用户服务通信
  • 用户服务有2个实例(在端口8081和8091上)
  • 在功能区服务上,我已经使用hystrix和foreign客户端实现了客户端负载平衡
  • 我使用Zuul路由使用ribbon-service API,然后这个API触发用户服务API

当我启动我的微服务生态系统并尝试使用ribbon-service API(zuulservice:8761/ribbon-service/)时,我得到以下错误:

com.netflix.zuul.exception.ZuulException:转发错误网址:org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoatingFilter.java:189)~[spring-cloud-netflix-zuul-2.0.0.RELEASE.jar:2.0.0.RELEASE]网址:org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoatingFilter.java:164)~[spring-cloud-netflix-zuul-2.0.0.RELEASE.jar:2.0.0.RELEASE]网址:org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoatingFilter.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(ServletWrapping Controller.java:165)[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELENSE]网址:org.springframework.cloud.netflix.zuul.web.ZuulController.handleRequest(ZuulControlr.java:44)[spring-cloud-netflix-zuul-2.0.0.RELEASE.jar:2.0.0.RELEASE]网址:org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELENSE]网址:org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RRELEASE]网址:org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]。。。。。。。。。。。。。。。。原因:com.netflix客户端异常:负载平衡器没有可用于客户端的服务器:功能区服务,网址:com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerSontext.java:483)~[ribbon-loadbalancer--2.2.5.jar:2.2.5]网址:com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommon.java:184)~[ribbon-loadbalancer--2.2.5.jar:2.2.5]网址:com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommon.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.availabilityFilteringRule.activeConnecttionsLimit=2147483647

输出之后,一切都会再次正常工作。

当我点击尤里卡服务:8765/ereka/apps时,我已经注册了功能区服务和所有用户服务实例。

这是我的zuul服务应用程序。属性:

> #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服务引导程序。属性:

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

我使用的是spring2.0.1和springcloudFinchley.RELEASE.

有人能解释一下发生了什么事吗?

谢谢!

DiscoveryClient的工作方式是,它从Eureka(服务发现)中获取每个定义的时间段(称为hearbeat)的新更改列表。在注册应用程序的新更改从服务发现传播到Zuul实例之前,它肯定会出现错误。

您在日志中看到的输出只是确认它已收到此信息。

您可以考虑为zuul配置添加strip-path配置。

在每个路由配置中添加stripPrefix=false

最新更新