这个巨坑断断续续的花了快一周的时间, 整个人都不好了, 必须记录一下.
Zuul 代理 请求服务;
请求服务A: OK
请求服务B: 报错; 信息如下:
2018-07-13 13:25:09.193 [http-nio-9602-exec-10] WARN o.s.c.netflix.zuul.filters.post.SendErrorFilter - Error during filtering
com.netflix.zuul.exception.ZuulException: Forwarding error
Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: product
刚开始有点儿懵, 完全懵了, 不知道为啥, 从哪里下手; 谷歌百度也没有多少资料;
比对了服务A和B的所有配置: build.gradle依赖配置; springboot版本号, clould版本号; 配置中心, 注册中心等等配置, 一毛一样; 不一样的改到一样;
最后, 老老实实的比对启动日志:
//服务A
o.s.c.consul.serviceregistry.ConsulServiceRegistry - Registering service with consul: NewService{id='funds-local-9004', name='funds', tags=[], address='172.31.40.97', port=9004, enableTagOverride=null, check=Check{script='null', interval='10s', ttl='null', http='http://172.31.40.97:9004/', tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null'}, checks=null}
//服务B
o.s.c.consul.serviceregistry.ConsulServiceRegistry - Registering service with consul: NewService{id='f-product-local-9006', name='f-product', tags=[], address='172.31.40.97', port=8500, enableTagOverride=null, check=Check{script='null', interval='10s', ttl='null', http='http://172.31.40.97:8500/health', tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null'}, checks=null}
看了好多次,没看出毛病, 最后一比对, 发现: port=8500, 这里明显不对, 这特么不是Consul的port么, 怎么会这样!!!
唯一的区别, 服务A的配置文件是 .properties的, 服务B 是.yml的.
换成properties的, 问题解决
what the fu********ck!
罪案现场::
// zuul dependency version:
springBootVersion = '2.0.3.RELEASE'
ext {
springCloudVersion = 'Finchley.RELEASE'
}
//Server A & B
ext {
springBootVersion = '1.5.10.RELEASE'
}
mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Edgware.SR3'