最近開發(fā)了一個(gè)微服務(wù)的產(chǎn)品,使用Eureka作為服務(wù)注冊(cè)中心颅湘,在測(cè)試環(huán)境時(shí)運(yùn)行正常话侧,但是部署到生產(chǎn)環(huán)境時(shí)出現(xiàn)Connection Refuse異常,檢查發(fā)現(xiàn)服務(wù)從Eureka拿到的服務(wù)列表的服務(wù)地址不可用闯参。
整個(gè)產(chǎn)品使用Docker容器部署瞻鹏,并通過(guò)Docker Compose進(jìn)行容器編排,服務(wù)注冊(cè)默認(rèn)注冊(cè)地址是容器內(nèi)部的地址赢赊,由于測(cè)試環(huán)境時(shí)單臺(tái)服務(wù)器乙漓,所有沒有出現(xiàn)問題级历。生產(chǎn)環(huán)境是多臺(tái)服務(wù)器分布式部署释移,就會(huì)出現(xiàn)這個(gè)問題,可以通過(guò)配置服務(wù)實(shí)例注冊(cè)IP地址解決這個(gè)問題寥殖。
配置如下:
# 指定服務(wù)注冊(cè)的宿主ip
eureka.instance.ip-address=192.168.1.1
# 配置注冊(cè)時(shí)使用ip而不是主機(jī)名
eureka.instance.prefer-ip-address=true
同時(shí)玩讳,如果一個(gè)微服務(wù)需要多接點(diǎn)部署時(shí),需保證Instance ID唯一嚼贡,否則僅有一個(gè)節(jié)點(diǎn)注冊(cè)成功熏纯。
配置項(xiàng)如下:
# 制定instance-id的生成策略,按實(shí)際調(diào)整粤策,確保每個(gè)服務(wù)唯一即可樟澜。
eureka.instance.instance-id=${spring.application.name}:${server.port}:${random.int}