最近开发了一个微服务的产品,使用Eureka作为服务注册中心,在测试环境时运行正常,但是部署到生产环境时出现Connection Refuse异常,检查发现服务从Eureka拿到的服务列表的服务地址不可用。
整个产品使用Docker容器部署,并通过Docker Compose进行容器编排,服务注册默认注册地址是容器内部的地址,由于测试环境时单台服务器,所有没有出现问题。生产环境是多台服务器分布式部署,就会出现这个问题,可以通过配置服务实例注册IP地址解决这个问题。
配置如下:
# 指定服务注册的宿主ip
eureka.instance.ip-address=192.168.1.1
# 配置注册时使用ip而不是主机名
eureka.instance.prefer-ip-address=true
同时,如果一个微服务需要多接点部署时,需保证Instance ID唯一,否则仅有一个节点注册成功。
配置项如下:
# 制定instance-id的生成策略,按实际调整,确保每个服务唯一即可。
eureka.instance.instance-id=${spring.application.name}:${server.port}:${random.int}