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配置就行了。

new URI(zk_servers_1) 路径包含下划线无法获取host的问题相关推荐

  1. 【踩坑】spconf.sty Latex样式模板的name包含下划线

    对于官方的Latex模板, 正常应该是这样: 但实际结果是这样: 找了很久都没有发现spconf.sty里哪里设置了\underline这句话.网上的\ulem也试过了不行. 后来仔细再看spconf ...

  2. 正则表达式:只能输入以字母开头,数字或者字母结尾,并由数字、字母、下划线组成的字符串,且字符串中必须包含下划线!

    只能输入以字母开头,数字或者字母结尾,并由数字.字母.下划线组成的字符串,且字符串中必须包含下划线! /^[a-zA-Z](?!.*?_$)(?=.*_)[a-zA-Z0-9_]*$/

  3. java不能字段包含下划线,如何INSERT包含下划线并且也是外键的字段

    如何在外键字段中插入包含下划线的数据?例如 . 这有效: INSERT INTO [childTable] (1, 'ABC') 但这不起作用: INSERT INTO [childTable] (1 ...

  4. java包名中是否可以包含下划线?

    提问:在开发的过程中经常遇这样一种情况,一个包名是由多个单词组成的,这是时候该不该用下划线分割呢? 例如,my package,com.example.mypackage or com.example ...

  5. android判断字符串是否包含下划线,android 富文本SpannableString去掉下划线

    总有些细节设计总监总是揪着不放,做的app中有个textview牵扯到了url链接,但是老大的意思是不能存在下划线,如下图: -----> 代码如下: String msg = "*注 ...

  6. vue引用import“@/路径“ 有下划线并且 crtl+鼠标无法点进去

    点击file 进入到setting中 选择webpack,指定到@vue\cli-service\webpack.config.js文件 关闭idea重启即可,下划线就消失了CTRL+鼠标也能进到引用 ...

  7. 将带下划线的字符串转换成大写(下划线后大写)的高效方法

    如test_tb_kkk_llll  转换为    TestTbKkkLlll 原理: 1. 判断是否包含下划线 (1) 包含: ① 按下划线将字符串切割成字符串数组 ② 在循环里调用本方法(这个字符 ...

  8. php 字符串含有下划线,PHP-我的会话ID中有下划线

    我正在尝试通过AJAX请求保留会话.仅仅调用session_start()不会接听现有的会话,而是创建一个新的会话ID.我的解决方案是通过AJAX调用将会话ID传递给PHP,但这导致以下错误: War ...

  9. mysql 模糊查询之特殊字符下划线 _

    在开发中,测试提出了一个bug,在某搜索中,搜索 _,结果把不包含下划线的内容也查了出来!这是什么问题呢?今天特此记录一下,顺便给大家分享下!  原sql:select * from table wh ...

最新文章

  1. c#五子棋实验报告_C#五子棋完整项目
  2. Hello World!!
  3. 机器学习笔记(七)贝叶斯分类器
  4. pandas isnull 函数
  5. ACM入门之【差分】
  6. 【Linux】一步一步学Linux——nm命令(250)
  7. 三丰三坐标编程基本步骤_三丰三坐标CRYSTA APEX S776
  8. Netty:Netty不断打开文件的BUG
  9. HTTP GET 和 POST 的区别
  10. JQuery EasyUI之DataGrid列名和数据列分别设置不同对齐方式
  11. SpringBoot之json转java实体类
  12. 每周一磁 · 磁性材料的居里温度与工作温度
  13. 爬虫day1 requests基本用法和网页基础
  14. macbook air_每次插入MacBook Pro或Air时如何听到提示音
  15. php微信卡券接口,核销卡券
  16. 乱弹琴20140421
  17. 大数据是什么?大数据可以做什么?大数据实际做了什么?大数据要怎么做?
  18. layui做折线图_flask+layui+echarts实现前端动态图展示数据效果
  19. Linux QT 4G发送HTTP POST请求发送JSON格式的数据
  20. 西安三星招聘软件测试,【三星半导体测试工程师面试题目|面试经验】-看准网...

热门文章

  1. 算法代码中的循环矩阵在哪体现_「Machine Learning 学习小结」| 向量在梯度下降算法当中的应用...
  2. android 添加随意拖动的桌面悬浮窗口,android 添加随意拖动的桌面悬浮窗口
  3. matlab 流固耦合,详讲流固耦合
  4. python 函数参数传递机制_Python函数参数传递机制(超级详细)
  5. crossin的编程教室python入门_简单三步,用 Python 发邮件
  6. mysql安装需要注意什么意思_mysql 安装过程及注意事项
  7. win32_bios 的对象编辑器无法保存对象_怎样创建Femap对象
  8. 神经网络人口预测matlab,BP神经网络预测(人口)程序(matlab)
  9. android 支付宝月账单 统计图_记账其实很简单,用微信、支付宝就够了!
  10. wxpython制作表格界面_[Python] wxPython 菜单栏控件学习总结(原创)