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 Finch1ey.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。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java基于Socket實(shí)現(xiàn)多人聊天室
這篇文章主要為大家詳細(xì)介紹了Java基于Socket實(shí)現(xiàn)多人聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
SpringBoot開發(fā)技巧之如何處理跨域請(qǐng)求CORS
CORS(Cross-Origin Resource Sharing)"跨域資源共享",是一個(gè)W3C標(biāo)準(zhǔn),它允許瀏覽器向跨域服務(wù)器發(fā)送Ajax請(qǐng)求,打破了Ajax只能訪問本站內(nèi)的資源限制2021-10-10
SpringBoot+Redis實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn)的示例
本文將結(jié)合實(shí)例代碼,介紹SpringBoot+Redis實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn)的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
Java使用modbus-master-tcp實(shí)現(xiàn)modbus tcp通訊
這篇文章主要為大家詳細(xì)介紹了另外一種Java語(yǔ)言的modbux tcp通訊方案,那就是modbus-master-tcp,文中的示例代碼講解詳細(xì),需要的可以了解下2023-12-12
Spring?Cloud?oauth2?認(rèn)證服務(wù)搭建過程示例
這篇文章主要為大家介紹了Spring?Cloud?oauth2?認(rèn)證服務(wù)搭建過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Springboot結(jié)合Flowable實(shí)現(xiàn)工作流開發(fā)
本文主要介紹了Springboot結(jié)合Flowable實(shí)現(xiàn)工作流開發(fā),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
List集合對(duì)象中按照不同屬性大小排序的實(shí)例
下面小編就為大家?guī)硪黄狶ist集合對(duì)象中按照不同屬性大小排序的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03

