我有一个python web应用程序,并使用restfull api [https://github.com/Netflix/eureka/wiki/Eureka-REST-operations]在eureka注册,我在eureka网页上发现它状态为UP,但我的网关服务器(也在eureka注册)找不到它,我称之为网址" gateway-server-host / myapp-url"以下回复是:
com.netflix.zuul.exception.ZuulException:转发错误 org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:188) 在 org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:163) 在 org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:111)
...
引起:com.netflix.client.ClientException:负载均衡器没有 为客户提供服务器:test at com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:483) 在 com.netflix.loadbalancer.reactive.LoadBalancerCommand $ 1.call(LoadBalancerCommand.java:184) 在 com.netflix.loadbalancer.reactive.LoadBalancerCommand $ 1.call(LoadBalancerCommand.java:180)
对这个问题的任何建议???
答案 0 :(得分:2)
您是否查看了Spring Cloud的Sidecar
?
它基本上是对你的非jvm语言服务(在你的情况下是python)和sidecar服务(你必须在同一主机上部署你的python服务和sidecar服务,如果我没有记错)的服务,你会将Zuul
端点包含在边车服务中,该服务将尝试处理诸如尤里卡之类的东西。
您启动了一个新的弹簧启动应用,注释了@EnableSidecar
,您配置了health-uri
和port
示例application.yml
server:
port: 5678
spring:
application:
name: sidecar
sidecar:
port: 8000
health-uri: http://localhost:8000/health.json
您可以查看有关Sidecar
here的Spring Cloud文档,了解有关如何设置的详细信息
答案 1 :(得分:0)
由于您使用Zuul,您需要手动注册路线。可以让他们只包含来自Eureka的应用程序名称。
Zuul路线配置示例:
zuul:
routes:
application1: /app1/**
application2: /app2/**
application3:
path: /app3/**
url: http://10.0.8.11:3000/
applicationN
是在尤里卡注册的名称。网址将自动解析并进行负载平衡。对于app3
,手动指定网址。
答案 2 :(得分:0)
添加Sidecar可以在您的Zuul / routes显示已注册的应用程序名称的范围内解决此问题。
即使您没有实际的应用程序,您也必须经历过,并且只需在此文档后面加上任何带有有效负载的名称-[https://github.com/Netflix/eureka/wiki/Eureka-REST-operations],该名称也将在Eureka中注册为应用程序。