new URI(zk_servers_1) 路徑包含下劃線無法獲取host的問題

spring cloud gateway使用zookeeper作為注冊中心調用其它服務的時候報了下面這個錯誤:

ava.lang.NullPointerException: nullat io.netty.util.NetUtil.isValidIpV4Address(NetUtil.java:648) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]at io.netty.util.NetUtil.createByteArrayFromIpAddressString(NetUtil.java:368) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]at reactor.ipc.netty.options.InetSocketAddressUtil.attemptParsingIpString(InetSocketAddressUtil.java:132) ~[reactor-netty-0.7.10.RELEASE.jar:0.7.10.RELEASE]at reactor.ipc.netty.options.InetSocketAddressUtil.createForIpString(InetSocketAddressUtil.java:80) ~[reactor-netty-0.7.10.RELEASE.jar:0.7.10.RELEASE]at reactor.ipc.netty.options.InetSocketAddressUtil.createInetSocketAddress(InetSocketAddressUtil.java:69) ~[reactor-netty-0.7.10.RELEASE.jar:0.7.10.RELEASE]at reactor.ipc.netty.options.ClientOptions.createInetSocketAddress(ClientOptions.java:253) ~[reactor-netty-0.7.10.RELEASE.jar:0.7.10.RELEASE]at reactor.ipc.netty.http.client.HttpClientOptions.getRemoteAddress(HttpClientOptions.java:87) ~[reactor-netty-0.7.10.RELEASE.jar:0.7.10.RELEASE]at reactor.ipc.netty.http.client.MonoHttpClientResponse.lambda$subscribe$0(MonoHttpClientResponse.java:76) ~[reactor-netty-0.7.10.RELEASE.jar:0.7.10.RELEASE]

調用的地址是http://zks_servers_1:18001,zks_servers_1是服務的hosts配置的名稱,空指針異常跟蹤發現是下面這個問題導致的:

//類HttpClientOptionspublic final InetSocketAddress getRemoteAddress(URI uri) {Objects.requireNonNull(uri, "uri");boolean secure = isSecure(uri);int port = uri.getPort() != -1 ? uri.getPort() : (secure ? 443 : 80);boolean shouldResolveAddress = !this.useProxy(uri.getHost());return this.createInetSocketAddress(uri.getHost(), port, shouldResolveAddress);}

uri.getHost()返回值是null,也就是說根據上面的調用地址,沒有獲取到對應的host。
uri的創建方式是:

//類MonoHttpClientResponse
MonoHttpClientResponse(HttpClient parent, String url, HttpMethod method, Function<? super HttpClientRequest, ? extends Publisher<Void>> handler) {this.parent = parent;boolean isWs = Objects.equals(method, HttpClient.WS);try {this.startURI = new URI(parent.options.formatSchemeAndHost(url, isWs));} catch (URISyntaxException var7) {throw Exceptions.bubble(var7);}this.method = isWs ? HttpMethod.GET : method;this.handler = handler;}

創建方式是調用URI的new URI(String)方法,知道原因之后在本地測試:

try {URI uri = new URI("http://zks_servers_1:18001/test.html");String host = uri.getHost();System.out.println(host);} catch (URISyntaxException e) {e.printStackTrace();}

確實獲取不到host,查看源碼發現:

 /*** Returns the host component of this URI.**   <li><p> A domain name consisting of one or more <i>labels</i>*   separated by period characters ({@code '.'}), optionally followed by*   a period character.  Each label consists of <i>alphanum</i> characters*   as well as hyphen characters ({@code '-'}), though hyphens never*   occur as the first or last characters in a label. The rightmost*   label of a domain name consisting of two or more labels, begins*   with an <i>alpha</i> character. </li>* </ul>** The host component of a URI cannot contain escaped octets, hence this* method does not perform any decoding.** @return  The host component of this URI,*          or {@code null} if the host is undefined*/public String getHost() {return host;}

谷歌翻譯:

由一個或多個標簽組成的域名由句點字符代碼'.'分隔,可選地后跟一個英文句號角色。 每個標簽由alphanum字符組成以及連字符字符代碼' - ',雖然連字符永遠不會作為標簽中的第一個或最后一個字符出現。 最右邊包含最少長度最少兩個并且以英文字符開始的標簽

舉例如下:
www.baidu.com,這個域名包含三個標簽www、baidu、com;
www.baidu-zhidao.com,這個域名包含三個標簽www、baidu-zhidao、com;
這個例子就是說明每個標簽都可以使用-連接;

然后看一下,我的報錯的服務名稱zks_servers_1,這個名稱沒有以【.】分割,包含了非法字符【_】最后以單個數字結尾也不符合要求。
實際上測試發現zks-servers-1這樣也是不正確的,不知道是不是翻譯的有問題,這個結果和翻譯不太匹配。

總而言之,修改服務器的hosts配置就行了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536881.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536881.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536881.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java ee 值范圍_JAVAEE之內置對象和屬性范圍

內置對象和屬性范圍四種屬性范圍九個內置對象1.內置對象如果說想要使用一個對象&#xff0c;必須new 出來&#xff0c;但是在我們的jsp操作中&#xff0c;發現我們使用過的out,request對象沒有進行實例化&#xff0c;類似于這樣的對象&#xff0c;我們叫做jsp的內置對象&#x…

JavaWeb學習筆記(九)--HttpServletResponse

web服務器接收到客戶端的HTTP請求&#xff0c;會針對每一次請求&#xff0c;分別創建一個用于代表請求的request對象和代表響應的response對象。 request和response對象既然代表請求和響應&#xff0c;那我們要獲取客戶端提交過來的數據&#xff0c;只需要找request對象即可。要…

java html5 上傳_HTML5結合ajax實現文件上傳以及進度顯示

基于原生html5實現&#xff0c;不需要falsh支持&#xff0c;進度可以自定義顯示&#xff0c;控制靈活&#xff0c; 本來打算使用jquery插件進行異步文件上傳&#xff0c;比如uploadfy但是需要額外的支持&#xff0c;也有人用iframe模仿異步上傳機制&#xff0c;感覺都比較別扭。…

7天玩轉機器學習

7天玩轉機器學習 人工智能時代&#xff0c;數據迎來大爆發&#xff0c;數據對于提升業務價值的重要性與日俱增。但面對海量數據&#xff0c;傳統分析方法已經顯得無能為力&#xff0c;而機器學習的成熟為企業帶來了強大的分析引擎&#xff0c;可在眾多領域幫助企業挖掘數據價值…

centos 6.5 yum java_Centos6.5 yum 安裝jdk1.8

centos 6.5 安裝卸載jdk-- 查看有沒有預裝jdk版本java -version-- 查看已安裝的版本rpm -qa|grep java-- 卸載預裝版本 rpm -e --nodeps 命令卸載rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64-- 查找可以安裝的jdk列表yum search java | grep -i --color J…

java 中使用mongodb_mongodb在java中的使用

agg Aggregation.newAggregation(Aggregation.match(new Criteria().andOperator(Criteria.where("timeStamp").lte(TypeChange.dateToLong(times[1])).gte(TypeChange.dateToLong(times[0])),new Criteria().orOperator(ruleCr))),//篩選符合條件的記錄Aggregation…

一次面試總結(記錄)

1,從一個數組里找重復出現次數最多的一個數&#xff1f;2,常用的linux命令3.垃圾收集器有哪些 &#xff1f;垃圾收集算法&#xff1f;4,線上服務器變慢了你是如何定位問題并處理的&#xff1f;5,你自己實現一個本地緩存,淘汰最久未使用,你怎么設計6,用棧實現計算器7,剔除二叉樹…

java 累加 0-9 a-z_JAVA獲得包含0-9、a-z、A-Z范圍內字符串的的隨機數實例

一、獲得0-9,a-z,a-z范圍的隨機字符串/*** java獲得0-9,a-z,a-z范圍的隨機數* param length 隨機數長度* return string*/public static string getrandomchar(int length) {char[] chr {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r,…

【PHP 擴展開發】Zephir 基礎篇

上一篇 《Zephir 簡介》 簡單介紹了環境搭建&#xff0c;編寫了一個的簡單示例。這一篇繼續介紹 Zephir 基礎。 基本語法Zephir 中&#xff0c;每個文件都必須有且只有一個類&#xff0c;每個類都必須有一個命名空間&#xff0c;目錄結構必須與所使用的類和命名空間的名稱相匹配…

java常見排序算法有哪些_Java中常用的6種排序算法詳細分解

排序算法很多地方都會用到&#xff0c;近期又重新看了一遍算法&#xff0c;并自己簡單地實現了一遍&#xff0c;特此記錄下來&#xff0c;為以后復習留點材料。廢話不多說&#xff0c;下面逐一看看經典的排序算法&#xff1a;1. 選擇排序選擇排序的基本思想是遍歷數組的過程中&…

python range函數

這個函數很簡單&#xff0c;就不寫例子了&#xff0c;看看語法&#xff0c;拿來即用 python range() 函數可創建一個整數列表&#xff0c;一般用在 for 循環中。 函數語法 range(start, stop[, step]) 參數說明&#xff1a; start: 計數從 start 開始。默認是從 0 開始。例如ra…

java tomcat重啟linux_Linux下tomcat重啟

進入Tomcat下的bin目錄cd/user/local/tomcat/bin關閉tomcat./shutdown.sh查看tomcat是否關閉ps -ef|grep java顯示以下信息&#xff0c;則Tomcat還未關閉root 7010 1 0 Apr19 ? 00:30:13 /usr/local/java/bin/java -Djava.util.logging.config.file/usr/loca…

左偏樹 P3377【模板】左偏樹(可并堆)

題目傳送門 代碼&#xff1a; /* code by: zstu wxk time: 2019/03/01 */ #include<bits/stdc.h> using namespace std; #define Fopen freopen("testdata.in","r",stdin); freopen("_out.txt","w",stdout); #define LL long lo…

lock 線程 java_JAVA多線程-基礎Lock Condition 并發集合

跟上一篇文章比較,這次改進了之前的代碼,使用了Lock Condition 和并發集合.代碼量減了一些,并且更加容易讀了.這篇代碼是上一篇的改進版,邏輯在前篇有說明,以防大家看不到,我再重現貼一遍.后續會使用高階的線程工具再次改進,以求代碼更簡單.代碼的邏輯:1)SProducer不停的產生nu…

mycat mysql ha 方案_7、基于 HA 機制的 Mycat 高可用--mycat

在實際項目中&#xff0c;Mycat 服務也需要考慮高可用性&#xff0c;如果 Mycat 所在服務器出現宕機&#xff0c;或 Mycat 服務故障&#xff0c;需要有備機提供服務&#xff0c;需要考慮 Mycat 集群。1、 高可用方案使用 HAProxy Keepalived 配合兩臺 Mycat 搭起 Mycat 集群&a…

爬蟲scrapy模塊

首先下載scrapy模塊 這里有驚喜 https://www.cnblogs.com/bobo-zhang/p/10068997.html 創建一個scrapy文件 首先在終端找到一個文件夾 輸入 scrapy startproject jy (項目件名) 修改setting文件配置 # Crawl responsibly by identifying yourself (and your website) on the us…

python canvas畫移動物體_如何實現Canvas圖像的拖拽、點擊等操作

上一篇Canvas的博文寫完后&#xff0c;有位朋友希望能對Canvas繪制出來的圖像進行點擊、拖拽等操作&#xff0c;因為Canvas繪制出的圖像能很好的美化。好像是想做爐石什么的游戲&#xff0c;我也沒玩過。Canvas在我的理解中就好像在一張畫布上繪制圖像&#xff0c;它只能看到卻…

Git基礎知識教程整理(Git基本操作)

Git簡介 Git是目前世界上最先進的分布式版本控制系統&#xff08;沒有之一&#xff09;。Linux之父Linux用C語言寫了Git分布式版本控制系統。 分布式版本控制系統與集中式版本控制系統的區別 區別分布式集中式中央服務器有&#xff0c;版本庫集中存放在中央服務器&#xff0c;工…

python plot map_使用matplotlibbasemap在邊界打印

我在繪制多邊形時遇到了困難&#xff0c;例如&#xff0c;在使用matplotlib basemap生成的地圖邊界上繪制多邊形。在下面的示例中&#xff0c;地圖邊界由日期線指定。我試圖通過指定三角形頂點的坐標來繪制一個跨越日期線的三角形。當所有的坐標都在地圖內時&#xff0c;這種方…

SQL查詢語句 group by后, 字符串合并

合并列值 --******************************************************************************************* 表結構&#xff0c;數據如下&#xff1a; id value ----- ------ aa bb aaa bbb ccc 需要得到結果&#xff1a; id values ------ ----------- aa,bb aaa…