问题描述:Linux服务器上部署eureka注册中心、gateway微服务、activity微服务,通过gateway调用activity就报如下错误:

java.net.UnknownHostException: Failed to resolve 'VM-0-13-centos' after 2 queries

Caused by: io.netty.resolver.dns.DnsNameResolverTimeoutException: [/183.60.82.98:53] query via UDP timed out

初步排查:

VM-0-13-centos是linux服务器的hostname,183.60.82.98是腾讯云的DNS服务器,说明没在服务器的hosts文件解析出来,跑到腾讯云的DNS去了,腾讯云上当然没有VM-0-13-centos肯定会报错。

所以我先改了/etc/hosts 文件,增加一行

49.129.901.105 VM-0-13-centos

再次尝试调用还是报错,没解决。

再次排查:我登陆腾讯云控制台查看域名解析的状态,显示不正常。因为我的域名是在华为云上购买的,服务器是腾讯云的,腾讯云提示要修改。于是在华为云上找到域名配置的dns服务器地址,

原先的dns地址是

ns1.huaweicloud-dns.com.
ns1.huaweicloud-dns.cn.
ns1.huaweicloud-dns.net.
ns1.huaweicloud-dns.org.

再增加两个腾讯云的dns地址

hugo.dnspod.net.
northeast.dnspod.net.

弄完后,腾讯云服务器上的域名解析状态变为正常了,如果你的服务器没有这个问题就忽略。

再次尝试调用还是报错,没解决。

第三次排查:微服务调用依赖eureka注册中心,VM-0-13-centos这个hostname来自

这个配置eureka.instance.hostname=localhost,localhost相当于本机即VM-0-13-centos这个主机名,于是想到使用云服务器的真实ip,而不用主机名。

eureka服务端增加如下配置:

eureka.instance.hostname=49.129.901.105
eureka.client.service-url.defaultZone=http://49.129.901.105:2001/eureka/
#使用ip替代主机名
eureka.instance.prefer-ip-address=true
#设置实例的ID为ip:port
eureka.instance.instance-id=49.129.901.105:${server.port}

其他微服务(eureka客户端)增加如下配置:

eureka.instance.hostname=49.129.901.105
eureka.client.service-url.defaultZone=http://49.129.901.105:2001/eureka/
#使用ip替代主机名
eureka.instance.prefer-ip-address=true
#设置实例的ID为ip:port
eureka.instance.instance-id=49.129.901.105:${server.port}

两处增加的配置是一样的,核心在于使用ip替代主机名

再次尝试调用没有报错,问题解决。

Spring Cloud GateWay 整合consul时出现DnsNameResolver$DnsResponseHandler.channelRead错误的解决方案第一步:看错的内容第二步:应该是确定配置是否正确第三步:修改hosts文件 第一步:看错的内容 例如笔者的错内容是 需要注意的是造成这种错误的根本原因是: io.netty.resolver.dns.DnsNameResolver$DnsResponseHandler.channelRead(DnsNameResolver.java
06-28 14:04:41.360: W/System.err(25211): at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:112) 06-...
1. org.redisson.client.RedisConnectionException: At least two sentinels should be defined in Redis configuration! SENTINEL SENTINELS command returns empty result! 2. Redisson 查找 sentinel 失败 3. Netty 查找 DNS 失败
使用场景:检测80w URL 可否打开 配置:高端配置,20+进程 500+CONCURRENT_REQUESTS 运行一段时间后会有DNSLookup什么的错误,也就是查找超时,但是在浏览器里可以打开这个网页 首先做一些可能的无用功,爬虫配置 : ‘COOKIES_ENABLED’: False, ‘RETRY_ENABLED’: False,‘DNS_TIMEOUT’: 60, 再配置可能的...
UnknownHostException是Java程序中常见的异常之一。其表示程序在执行过程中,无法确定目标主机的IP地址,又称为“无法识别的主机名”异常。 当我们访问一个网站或者连接一个远程服务器的时候,程序需要使用主机名或者IP地址进行连接,但是如果主机名或者IP地址有误或者不存在,就会抛出UnknownHostException异常。这个异常通常和网络连接有关,发生原因可能是DNS解析失败、网络连接不通或者主机名输入错误等。 我们可以通过多种方式来解决UnknownHostException异常,比如检查网络连接、排除输入错误、修改hosts文件等。其中最常见的解决方法是在Java程序中使用正确的主机名或者IP地址,确保程序能够正确地连接目标主机并进行操作。 总之,UnknownHostException异常是Java程序中常见的异常之一,当程序无法确定目标主机的IP地址时会抛出此异常,我们需要通过检查网络连接、排除输入错误等方式来进行解决。