Spring Boot集成Consul启动失败:Connection Refused错误排查求助
解决Spring Boot集成Consul时的Connection Refused错误
看起来你的应用在尝试连接Consul服务的localhost:8090端口时被拒绝了,虽然你已经修改了Spring Boot应用的端口,且同端口的普通应用能正常运行,但问题应该出在Consul服务本身或者你的Consul配置上,我给你梳理几个排查方向:
先确认Consul服务是否正常运行在8090端口
首先得排除最基础的问题:Consul有没有启动?有没有在8090端口监听?- 你可以用命令检查端口占用:Windows下用
netstat -ano | findstr :8090,Linux/macOS用lsof -i :8090或者ss -tulpn | grep :8090,看看是否有Consul的进程在使用这个端口。 - 如果Consul没启动,先启动Consul;如果Consul启动了但不在8090端口,那要么修改Consul的启动参数(比如启动时加
consul agent -dev -http-port 8090),要么调整Spring Boot的配置去连接Consul实际的端口。
- 你可以用命令检查端口占用:Windows下用
核对Spring Boot中Consul的配置是否正确
注意区分应用自身的端口和Consul服务的端口,你修改的server.port是应用自己的端口,但Consul的连接配置是独立的:
打开你的bootstrap.properties,确认是否有正确配置Consul的地址和端口:# 这是应用自身的端口,和Consul无关 server.port=你的应用端口 # 这才是连接Consul的配置,要和Consul实际运行的端口一致 spring.cloud.consul.host=localhost spring.cloud.consul.port=8090别把这两个配置搞混了——如果只改了
server.port,没配置spring.cloud.consul.port,应用会默认去连Consul的8500端口,这也会导致连接失败。排查防火墙或权限问题
虽然同端口的普通应用能运行,但Consul可能被防火墙拦截了:- Windows下检查防火墙是否允许Consul的8090端口通信;Linux下看看iptables或ufw规则是否限制了该端口。
- 另外,Consul启动时需要足够的权限绑定端口,如果是非root用户启动Consul,绑定1024以下的端口会失败,但8090是高位端口,这个可能性较低,但也可以留意Consul启动日志里的报错。
查看Consul的启动日志
启动Consul时仔细看日志,如果有类似Failed to listen on 0.0.0.0:8090的报错,说明端口被其他进程占用(但你说同端口的应用能跑,那可能是Consul启动时的冲突?)或者没有权限绑定,这时候需要排查端口占用情况。
先从这几个方向入手,应该能定位到问题所在。
内容的提问来源于stack exchange,提问作者Ayman Arif
相关产品推荐
相关产品推荐

