您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“spring cloud consul如何使用ip注冊(cè)服務(wù)”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“spring cloud consul如何使用ip注冊(cè)服務(wù)”這篇文章吧。
我測(cè)試spring cliud使用consul作為注冊(cè)中心的時(shí)候,發(fā)現(xiàn)服務(wù)注冊(cè)的時(shí)候,注冊(cè)的都是hostname,比如:
注冊(cè)了一個(gè)commonservice,在consul中是這樣的:
{ "ID":"commonservice123", "address":"testcommonserver" ........ }
這肯定是不對(duì)的。
加入我有一個(gè)服務(wù)payservice需要調(diào)用commonservice,payservice從consul中獲取的commonservice的地址是testcommonserver,而payservice所在的服務(wù)器地址是121.57.68.98上,這臺(tái)服務(wù)器無法解析hostname是testcommonserver的服務(wù)器的ip地址,無法調(diào)用commonservie,這時(shí)候就會(huì)報(bào)下面這個(gè)錯(cuò)誤:
unKnownHostException
.......
為了解決這個(gè)問題,我需要在注冊(cè)服務(wù)的時(shí)候,讓服務(wù)以ip的方式注冊(cè),我的測(cè)試環(huán)境是:
spring cloud Finch2ey.SR2
consul v1.4.3
修改bootstrap.yml配置文件:
spring: cloud: consul: host: xxx.xxx.xxx.xxxx port: 8500 discovery: prefer-ip-address: true //這個(gè)必須配 tags: version=1.0 instance-id: ${spring.application.name}:${spring.cloud.client.ip-address} healthCheckInterval: 15s health-check-url: http://${spring.cloud.client.ip-address}:${server.port}/actuator/health
${spring.cloud.client.ip-address}這個(gè)屬性是spring cloud內(nèi)置,用來獲取ip,不同的spring cloud版本可能稍有不同,如果想要確定自己的版本是什么樣的,可以查看這個(gè)文件:
HostInfoEnvironmentPostProcessor
@Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { InetUtils.HostInfo hostInfo = getFirstNonLoopbackHostInfo(environment); LinkedHashMap<String, Object> map = new LinkedHashMap<>(); map.put("spring.cloud.client.hostname", hostInfo.getHostname()); map.put("spring.cloud.client.ip-address", hostInfo.getIpAddress()); MapPropertySource propertySource = new MapPropertySource( "springCloudClientHostInfo", map); environment.getPropertySources().addLast(propertySource); }
這時(shí)候再啟動(dòng)項(xiàng)目測(cè)試,發(fā)現(xiàn)注冊(cè)地址變了:
{ "ID":"commonservice123", "address":"10.52.xx.xx" ........ }
注冊(cè)的address變成了服務(wù)的內(nèi)網(wǎng)地址,如果其它服務(wù)和commonservice在同一個(gè)網(wǎng)絡(luò)中,可以通過內(nèi)網(wǎng)訪問,這樣也是可以的,但是如果內(nèi)網(wǎng)不能訪問,其它服務(wù)仍然不能訪問,這時(shí)候就需要注冊(cè)服務(wù)的時(shí)候以公網(wǎng)的ip注冊(cè)才行。
修改bootstrap.yml配置文件:
spring: cloud: consul: host: xxx.xxx.xxx.xxx port: 8500 config: data-key: data format: yaml discovery: prefer-ip-address: true //這個(gè)必須配 tags: version=1.0 instance-id: ${spring.application.name}:${spring.cloud.client.ip-address} healthCheckInterval: 15s health-check-url: http://${spring.cloud.client.ip-address}:${server.port}/actuator/health inetutils: preferred-networks: - 公網(wǎng)ip1 - 公網(wǎng)ip2
可以看到增加一個(gè)inetutils配置,這個(gè)配置是spring cloud的網(wǎng)絡(luò)工具類,這個(gè)配置的含義是如果獲取ip時(shí)獲取到多個(gè)ip(內(nèi)網(wǎng)、外網(wǎng)),就優(yōu)先選擇我配置的ip中存在的ip,這樣再測(cè)試就會(huì)發(fā)現(xiàn),注冊(cè)service的時(shí)候就變成了公網(wǎng)ip。
以上是“spring cloud consul如何使用ip注冊(cè)服務(wù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。