我已将Zuul设置为具有两个不同应用程序(分别称为Docker应用程序A和Docker应用程序B)的Docker容器,位于主机1上。
我还在EOST 2上将Eureka设置为具有一个应用程序(称为Docker应用程序C)的Docker容器。
有效方法:Eureka能够成功注册应用程序A,B,C和Zuul网关。由于Zuul和应用程序A和B在同一主机上,因此两个应用程序(A和B)都可以正常工作,并且Zuul可以正确地与其集成。
问题:当我要求Zuul网关访问应用程序C的其余端点(包含在主机2中-与Eureka相同的主机)时,Zuul无法将请求转发到主机2。
我的理解:因此,我已经清楚地看到,如果我在与Zuul相同的主机上启动Application C,它将快乐集成,并找到转发ipAdd和端口。但是,当我尝试在HOST 2上启动Application C时,Zuul正在HOST1上寻找ipAdd:Port(因为应用程序显然在HOST2上),因此进入
“ com.netflix.zuul.exception.ZuulException:转发错误”
F1,请帮助。提前致谢。
我在此处附加失败跟踪:
WARN 1 --- [nio-8762-exec-1] o.s.c.n.z.filters.post.SendErrorFilter:过滤期间出错 com.netflix.zuul.exception.ZuulException:org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:189)处的转发错误〜[spring-cloud-netflix-zuul-2.0.1 .RELEASE.jar!/:2.0.1.RELEASE] 在org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:164)〜[spring-cloud-netflix-zuul-2.0.1.RELEASE.jar!/:2.0.1.RELEASE ]
此错误归因于:
原因:com.netflix.client.ClientException:负载均衡器没有适用于客户端的服务器:ApplicationC
此跟踪信息归因于:
原因:java.lang.RuntimeException:org.apache.http.conn.ConnectTimeoutException:连接到172.17.0.17:8099 [/172.17.0.17]失败:连接超时 原因:org.apache.http.conn.ConnectTimeoutException:连接到172.17.0.17:8099 [/172.17.0.17]失败:连接超时 [io-8762-exec-10] o.apache.http.impl.execchain.RetryExec:在处理对{}-> http://172.17.0.17:8099的请求时捕获了I / O异常(java.net.NoRouteToHostException):没有路由到主办 2019-02-10 10:19:08.367信息1 --- [io-8762-exec-10] o.apache.http.impl.execchain.RetryExec:重试对{}-> http://172.17.0.17:8099的请求>
很显然,Zuul正在尝试转发HOST1上的请求,因此收到转发错误。应用程序C在HOST2上。请问我如何告诉ZUUL在HOST2上转发它。谢谢!
更新2 :我运行了docker inspect container_ID | grep“ IPAddress”-所有容器(用于所有应用程序和ZUUL)的IP地址与在Eureka仪表板中注册的IP地址相同。另外,如果有帮助,我可以将preferredIpAddress设置为true。
eureka.instance.preferIpAddress:错误
Eureka仪表板显示:
UPLOADLOCAL(c93c01ff3872:uploadLocal:8099) 其中UPLOADLOCAL是serviceId,c93c01ff3872是docker容器ID,uploadLocal应用程序名称,8099是端口。
这是我的Eureka的application.yml文件:
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://localhost:8877/eureka/