记录一个FeginClient调不通 报Connection Refused的坑

 记录一个FeginClient调不通 报Connection Refused的坑

1.背景

项目开发的时候,有一个微服务,本地Dev环境走FeginClient是可以调通的,但一上测试环境,UAT环境,就一直报Connection Refused,本地无法复现,别的环境又必现,为了赶进度当时就采取直连的方式调用

2.排查过程

我百度查询后,总结了一下,主要有以下几种结果:

2.1、服务未注册

2.2、服务名不一致、eureka注册中心不一致

2.3、注册到eureka上的是hostname,不是IP+端口号

2.4、多网卡导致eureka注册的IP问题

2.5、服务器该端口是否能通讯,是否被防火墙拦截

按以上的都试过,还是报Connection Refused,实在没办法了,想到Dev环境是可以直接走服务名调用的,我把Dev和测试环境 eureka的配置拿出来比较,发现了测试环境多了下面一行配置

eureka.instance.non-secure-port=80

我立马拉去百度了一下

而且eureka.instance.non-secure-port-enabled 这一配置默认值为true,从这里可以看出调用FeginClient是走80端口,而不是服务启动的端口号,eureka注册中心拿到的是服务启动端口,但微服务有指定了80端口才能被FeginClient调用,所以就会报Connection Refused

本地Dev加上这一配置,直接复现

3.解决方案

方案一:去掉 eureka.instance.non-secure-port=80这一项配置

方案二:eureka.instance.non-secure-port=你服务启动的端口号

方案一本人已试过,方案二未尝试(欢迎其他小伙伴试一下)