spring cloud consul使用ip注冊服務(wù)的方法示例
我測試spring cliud使用consul作為注冊中心的時候,發(fā)現(xiàn)服務(wù)注冊的時候,注冊的都是hostname,比如:
注冊了一個commonservice,在consul中是這樣的:
{
"ID":"commonservice123",
"address":"testcommonserver"
........
}
這肯定是不對的。
加入我有一個服務(wù)payservice需要調(diào)用commonservice,payservice從consul中獲取的commonservice的地址是testcommonserver,而payservice所在的服務(wù)器地址是121.57.68.98上,這臺服務(wù)器無法解析hostname是testcommonserver的服務(wù)器的ip地址,無法調(diào)用commonservie,這時候就會報下面這個錯誤:
unKnownHostException
.......
為了解決這個問題,我需要在注冊服務(wù)的時候,讓服務(wù)以ip的方式注冊,我的測試環(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 //這個必須配
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}這個屬性是spring cloud內(nèi)置,用來獲取ip,不同的spring cloud版本可能稍有不同,如果想要確定自己的版本是什么樣的,可以查看這個文件:
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);
}
這時候再啟動項目測試,發(fā)現(xiàn)注冊地址變了:
{
"ID":"commonservice123",
"address":"10.52.xx.xx"
........
}
注冊的address變成了服務(wù)的內(nèi)網(wǎng)地址,如果其它服務(wù)和commonservice在同一個網(wǎng)絡(luò)中,可以通過內(nèi)網(wǎng)訪問,這樣也是可以的,但是如果內(nèi)網(wǎng)不能訪問,其它服務(wù)仍然不能訪問,這時候就需要注冊服務(wù)的時候以公網(wǎng)的ip注冊才行。
修改bootstrap.yml配置文件:
spring:
cloud:
consul:
host: xxx.xxx.xxx.xxx
port: 8500
config:
data-key: data
format: yaml
discovery:
prefer-ip-address: true //這個必須配
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
可以看到增加一個inetutils配置,這個配置是spring cloud的網(wǎng)絡(luò)工具類,這個配置的含義是如果獲取ip時獲取到多個ip(內(nèi)網(wǎng)、外網(wǎng)),就優(yōu)先選擇我配置的ip中存在的ip,這樣再測試就會發(fā)現(xiàn),注冊service的時候就變成了公網(wǎng)ip。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java中VO PO DTO POJO BO DO對象的應(yīng)用場景及使用
文章介紹了Java開發(fā)中常用的幾種對象類型及其應(yīng)用場景,包括VO、PO、DTO、POJO、BO和DO等,并通過示例說明了它們在不同場景下的應(yīng)用2025-01-01
Mybatis?XML配置文件實現(xiàn)增刪改查的示例代碼
本文主要介紹了Mybatis?XML配置文件實現(xiàn)增刪改查的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2025-03-03
詳解servlet調(diào)用的幾種簡單方式總結(jié)
這篇文章主要介紹了詳解servlet調(diào)用的幾種簡單方式總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2021-01-01
springboot @WebFilter注解過濾器的實現(xiàn)
這篇文章主要介紹了springboot @WebFilter注解過濾器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-03-03
使用mybatis的typeHandler對clob進行流讀寫方式
這篇文章主要介紹了使用mybatis的typeHandler對clob進行流讀寫方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
Java設(shè)置session超時的幾種方式總結(jié)
這篇文章主要介紹了Java設(shè)置session超時的幾種方式總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-07-07

