每次往Consul注册新的服务,我们无需更改zuul的网关配置,就可以通过zuul服务的ip实现路由转发功能。
serviceservice-id(instance-id)ip:porturi通过路由的访问方式test-configtest-config10.9.100.100:8801/api/getCountNum
/api/hand/sites
/health
localhost:8804/test-config/api/getCountNum
localhost:8804/test-config/api/hand/sites
localhost:8804/test-config/health
test-config-service00test-config-service0010.9.100.100:8802/api/getCountNum
/api/hand/sites
/health
localhost:8804/test-config-service00/api/getCountNum
localhost:8804/test-config-service00/api/hand/sites
localhost:8804/test-config-service00/health
test-config-service01test-config-service0110.9.100.100:8803/api/getCountNum
/api/hand/sites
/health
localhost:8804/test-config-service01/api/getCountNum
localhost:8804/test-config-service01/api/hand/sites
localhost:8804/test-config-service01/health
路由服务
zuul-gateway-service
(在这里是
test-config-service02)
zuul-gateway-servicelocalhost:8804/health请求方式:
${ZuulServerIP}:${server.port}:/${新注册的Server}/[新服务的请求uri]Consul上的三个服务:
Zuul-gateway服务:
注:应为是本地启动的zuul-gateway服务,名字为test-config-service02,端口号为8804 。另,Consul服务上有个红×的原因是因为我是本地电脑注册到Consul的,健康检测时获取的是我电脑PC的主机名,该主机名在Consul服务器上没有映射,故无法健康检测。但是服务不受影响。
test-config-service02服务的
服务test-config测试:
17:43:46.536 [http-nio-8804-exec-5] INFO com.netflix.config.ChainedDynamicProperty - Flipping property: test-config.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 17:43:46.537 [http-nio-8804-exec-5] INFO com.netflix.util.concurrent.ShutdownEnabledTimer - Shutdown hook installed for: NFLoadBalancer-PingTimer-test-config 17:43:46.538 [http-nio-8804-exec-5] INFO com.netflix.loadbalancer.BaseLoadBalancer - Client: test-config instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=test-config,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null 17:43:46.539 [http-nio-8804-exec-5] INFO com.netflix.loadbalancer.DynamicServerListLoadBalancer - Using serverListUpdater PollingServerListUpdater 17:43:46.547 [http-nio-8804-exec-5] INFO com.netflix.config.ChainedDynamicProperty - Flipping property: test-config.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 17:43:46.547 [http-nio-8804-exec-5] INFO com.netflix.loadbalancer.DynamicServerListLoadBalancer - DynamicServerListLoadBalancer for client test-config initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=test-config,current list of Servers=[hdp01:8801],Load balancer stats=Zone stats: {unknown=[Zone:unknown; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;] },Server stats: [[Server:hdp01:8801; Zone:UNKNOWN; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0] ]}ServerList:ConsulServerList{serviceId='test-config', tag=null} 17:43:47.565 [PollingServerListUpdater-0] INFO com.netflix.config.ChainedDynamicProperty - Flipping property: test-config.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
服务 test-config-service00测试:
18:49:12.282 [http-nio-8804-exec-1] INFO com.netflix.config.ChainedDynamicProperty - Flipping property: test-config-service00.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 18:49:12.300 [http-nio-8804-exec-1] INFO com.netflix.util.concurrent.ShutdownEnabledTimer - Shutdown hook installed for: NFLoadBalancer-PingTimer-test-config-service00 18:49:12.300 [http-nio-8804-exec-1] INFO com.netflix.loadbalancer.BaseLoadBalancer - Client: test-config-service00 instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=test-config-service00,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null 18:49:12.306 [http-nio-8804-exec-1] INFO com.netflix.loadbalancer.DynamicServerListLoadBalancer - Using serverListUpdater PollingServerListUpdater 18:49:12.329 [http-nio-8804-exec-1] INFO com.netflix.config.ChainedDynamicProperty - Flipping property: test-config-service00.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 18:49:12.330 [http-nio-8804-exec-1] INFO com.netflix.loadbalancer.DynamicServerListLoadBalancer - DynamicServerListLoadBalancer for client test-config-service00 initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=test-config-service00,current list of Servers=[hdp01:8802],Load balancer stats=Zone stats: {unknown=[Zone:unknown; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;] },Server stats: [[Server:hdp01:8802; Zone:UNKNOWN; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0] ]}ServerList:ConsulServerList{serviceId='test-config-service00', tag=null} 18:49:13.355 [PollingServerListUpdater-0] INFO com.netflix.config.ChainedDynamicProperty - Flipping property: test-config-service00.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
该错误出现的环境:Consul上的服务都正常,本地的zuul-gateway服务也正常。在请求后端接口的时候,INFO com.netflix.loadbalancer.DynamicServerListLoadBalancer - DynamicServerListLoadBalancer for client test-config-service00 initialized: DynamicServerListLoadBalancer:也正常,能看到请求体包括访问的服务、ip、端口、数据都正常,但是结果获取结果的时候报错。
com.netflix.zuul.exception.ZuulException: at org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter.findZuulException(SendErrorFilter.java:118) ~[spring-cloud-netflix-zuul-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter.run(SendErrorFilter.java:78) ~[spring-cloud-netflix-zuul-2.1.2.RELEASE.jar:2.1.2.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.error(FilterProcessor.java:105) [zuul-core-1.3.1.jar:1.3.1] at com.netflix.zuul.ZuulRunner.error(ZuulRunner.java:112) [zuul-core-1.3.1.jar:1.3.1] at com.netflix.zuul.http.ZuulServlet.error(ZuulServlet.java:145) [zuul-core-1.3.1.jar:1.3.1] at com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:83) [zuul-core-1.3.1.jar:1.3.1] at org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:165) [spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE] at org.springframework.cloud.netflix.zuul.web.ZuulController.handleRequest(ZuulController.java:45) [spring-cloud-netflix-zuul-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) [spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039) [spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) [spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) [spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) [spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) [tomcat-embed-core-9.0.22.jar:9.0.22] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) [spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [tomcat-embed-core-9.0.22.jar:9.0.22] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-9.0.22.jar:9.0.22] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.22.jar:9.0.22] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.22.jar:9.0.22] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.22.jar:9.0.22] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.22.jar:9.0.22] at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:88) [spring-boot-actuator-2.1.7.RELEASE.jar:2.1.7.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.22.jar:9.0.22] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.22.jar:9.0.22] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.22.jar:9.0.22] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.ja# 添加ribbon的超时时间设置 ribbon: ReadTimeout: 3000 ConnectTimeout: 10000