Zuul转发错误

问题描述 投票:0回答:2

我正面临着使用Zuul和Ribbon的问题。我也使用Eureka进行微服务注册。

  • 我有使用REST API与用户服务通信的功能区服务(端口9000)
  • 用户服务有2个实例(在端口8081和8091上)
  • 在ribbon-service上我使用hystrix和feign客户端实现了客户端负载平衡
  • 我使用Zuul路由使用带状服务API,然后此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]在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]在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] at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:117)〜[zuul-core-1.3.1.jar:1.3.1] at com.netflix.zuul.FilterProcessor .processZuulFilter(FilterProcessor.java:193)〜[zuul-core-1.3.1.jar:1.3.1] at com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:157)~ [zuul-core-1.3。 1.jar:1.3.1] at com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:118)~ [zuul-core-1.3.1.jar:1.3.1] at com.netfli x.zuul.ZuulRunner.route(ZuulRunner.java:96)〜[zuul-core-1.3.1.jar:1.3.1] at com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:116)〜 [zuul-core-1.3.1.jar:1.3.1] at 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.springframework.cloud.netflix.zuul org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle中的.web.ZuulController.handleRequest(ZuulController.java:44)[spring-cloud-netflix-zuul-2.0.0.RELEASE.jar:2.0.0.RELEASE] (SimpleControllerHandlerAdapter.java:52)[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)[spring-webmvc- 5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)[chring-webm vc-5.0.5.RELEASE.jar:5.0.5.RELEASE] ................引起:com.netflix.client.ClientException:负载均衡器没有可用的服务器for client:com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:483)〜[ribbon-loadbalancer-2.2.5.jar:2.2.5]中的功能区服务,位于com.netflix.loadbalancer.reactive.LoadBalancerCommand $ 1 .call(LoadBalancerCommand.java:184)〜[ribbon-loadbalancer-2.2.5.jar:2.2.5] at com.netflix.loadbalancer.reactive.LoadBalancerCommand $ 1.call(LoadBalancerCommand.java:180)~ [ribbon-loadbalancer -2.2.5.jar:2.2.5] at rx.Observable.unsafeSubscribe(Observable.java:10327)〜[rxjava-1.3.8.jar:1.3.8] at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap) .java:94)〜[rxjava-1.3.8.jar:1.3.8] at 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 INFO 19233 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty:Flipping属性:ribbon-service.ribbon.ActiveConnectionsLimit使用NEXT属性:niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647

在输出之后,一切都很好。

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

这是我的zuul服务application.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-service 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

我正在使用spring 2.0.1和spring cloud Finchley.RELEASE。

有人可以解释发生了什么吗?

谢谢!

spring-cloud netflix-zuul spring-cloud-netflix netflix netflix-feign
2个回答
0
投票

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

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.