ZuulException: Forwarding error : Load balancer does not have available server for client:

柔光的暖阳◎ 2022-05-21 08:13 610阅读 0赞

在配置zuul的时候,用postman调接口的时候报错误:

  1. com.netflix.zuul.exception.ZuulException: Forwarding error
  2. at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:188)
  3. at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:163)
  4. at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:111)
  5. at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:112)
  6. at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:193)
  7. at com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:157)
  8. at com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:118)
  9. at com.netflix.zuul.ZuulRunner.route(ZuulRunner.java:96)
  10. at com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:116)
  11. at com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:81)
  12. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
  13. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  14. at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  15. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  16. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  17. at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
  18. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  19. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  20. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  21. at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
  22. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  23. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  24. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  25. at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:111)
  26. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  27. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  28. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  29. at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
  30. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  31. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  32. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  33. at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
  34. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  35. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  36. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  37. at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
  38. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  39. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  40. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  41. at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106)
  42. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  43. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  44. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  45. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
  46. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  47. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  48. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  49. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
  50. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
  51. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
  52. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
  53. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
  54. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
  55. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
  56. at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
  57. at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
  58. at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
  59. at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
  60. at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
  61. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  62. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  63. at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  64. at java.lang.Thread.run(Thread.java:745)
  65. Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: user-service-2
  66. at com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:483)
  67. at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:184)
  68. at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180)
  69. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  70. at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94)
  71. at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42)
  72. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  73. at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber$1.call(OperatorRetryWithPredicate.java:127)
  74. at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.enqueue(TrampolineScheduler.java:73)
  75. at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52)
  76. at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:79)
  77. at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:45)
  78. at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:276)
  79. at rx.Subscriber.setProducer(Subscriber.java:209)
  80. at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:138)
  81. at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:129)
  82. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
  83. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  84. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
  85. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  86. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
  87. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  88. at rx.Observable.subscribe(Observable.java:10247)
  89. at rx.Observable.subscribe(Observable.java:10214)
  90. at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:444)
  91. at rx.observables.BlockingObservable.single(BlockingObservable.java:341)
  92. at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:112)
  93. at org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand.run(AbstractRibbonCommand.java:187)
  94. at org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand.run(AbstractRibbonCommand.java:52)
  95. at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)
  96. at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)
  97. at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
  98. at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
  99. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
  100. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  101. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
  102. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  103. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
  104. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  105. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  106. at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)
  107. at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
  108. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
  109. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  110. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  111. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
  112. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
  113. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  114. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
  115. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
  116. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
  117. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  118. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  119. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
  120. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
  121. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  122. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
  123. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
  124. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  125. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
  126. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
  127. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
  128. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  129. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  130. at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)
  131. at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
  132. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  133. at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)
  134. at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)
  135. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  136. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
  137. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
  138. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
  139. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  140. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  141. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
  142. at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
  143. at rx.Observable.unsafeSubscribe(Observable.java:10151)
  144. at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)
  145. at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
  146. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
  147. at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  148. at rx.Observable.subscribe(Observable.java:10247)
  149. at rx.Observable.subscribe(Observable.java:10214)
  150. at rx.internal.operators.BlockingOperatorToFuture.toFuture(BlockingOperatorToFuture.java:51)
  151. at rx.observables.BlockingObservable.toFuture(BlockingObservable.java:411)
  152. at com.netflix.hystrix.HystrixCommand.queue(HystrixCommand.java:378)
  153. at com.netflix.hystrix.HystrixCommand.execute(HystrixCommand.java:344)
  154. at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:158)
  155. ... 61 common frames omitted

在stackoverflow和github上找了很多办法,但是还不能解决我的问题,可能对你有用,一并总结如下:

  1. https://stackoverflow.com/questions/41401009/load-balancer-does-not-have-available-server-for-client
  2. https://github.com/spring-cloud/spring-cloud-netflix/issues/2530

这些都解决不了问题,后来查了zuul的官方配置:https://cloud.spring.io/spring-cloud-netflix/multi/multi\_\_router\_and\_filter\_zuul.html

发现我的zuul中boostrap.properties的配置是:
zuul.routes.user-service-1.path=//\*
zuul.routes.user-service-2.path=//\*
如果把user-service-2这个配置去掉,那么就正常,一旦加上就报错,后来怀疑是/*/是这个地方配置有问题,但是改成:
zuul.routes.user-service-1.path=/user-service-1/

zuul.routes.user-service-2.path=/user-service-2/**
用postman调接口的时候,就要重复用user-service-1, 例如:
get http://localhost:8900/user-service-1/user-service-1/user
这样才调得通,但是很显然这不是想要的,应该是:
get http://localhost:8900/user-service-1/user

于是查看zuul的配置文档,找到:
这里写图片描述

于是配置:
zuul.routes.user-service-1.path=/user-service-1/**
zuul.routes.user-service-1.stripPrefix=false
zuul.routes.user-service-2.path=/user-service-1/**
zuul.routes.user-service-2.stripPrefix=false

发表评论

表情:
评论列表 (有 0 条评论,610人围观)

还没有评论,来说两句吧...

相关阅读