Java 有人知道MongoDB超时异常的修复方法吗?

Java 有人知道MongoDB超时异常的修复方法吗?,java,mongodb,Java,Mongodb,最近,我越来越频繁地遇到MongoDB超时异常。我编写了一个discord bot,它依赖它完成大多数基于公会的功能,但昨天它根本无法使用Java驱动程序登录MongoDB。只是为了对它作一个概述,我使用了所有最新的驱动程序和依赖项,并且根本没有使用任何不推荐使用的方法 因为这在我自己的代码中不是问题,所以我尝试修补连接超时和不同的网络设置 以下是控制台中的错误日志(忽略记录器消息): 2020-05-22 18:25[main]卡文博特[INFO]-登录数据库。。。 2020-05-22 18

最近,我越来越频繁地遇到MongoDB超时异常。我编写了一个discord bot,它依赖它完成大多数基于公会的功能,但昨天它根本无法使用Java驱动程序登录MongoDB。只是为了对它作一个概述,我使用了所有最新的驱动程序和依赖项,并且根本没有使用任何不推荐使用的方法

因为这在我自己的代码中不是问题,所以我尝试修补连接超时和不同的网络设置

以下是控制台中的错误日志(忽略记录器消息):

2020-05-22 18:25[main]卡文博特[INFO]-登录数据库。。。
2020-05-22 18:25[主要]卡文博特[信息]-登录MongoDB
线程“main”com.mongodb.MongoConfigurationException中出现异常异常:无法查找主机discord-y3bzo.mongodb.net的TXT记录
位于com.mongodb.internal.dns.DefaultDnsResolver.ResolveAdditionalQueryParametersFromTxRecords(DefaultDnsResolver.java:131)
位于com.mongodb.ConnectionString。(ConnectionString.java:378)
位于com.mongodb.client.MongoClients.create(MongoClients.java:61)
位于com.dragons0u1.CavenBot.main(CavenBot.java:37)
原因:javax.naming.CommunicationException:DNS错误[根异常为java.net.SocketTimeoutException:接收超时];剩余名称“discord-y3bzo.mongodb.net”
位于jdk.naming.dns/com.sun.jndi.dns.DnsClient.query(DnsClient.java:313)
位于jdk.naming.dns/com.sun.jndi.dns.Resolver.query(Resolver.java:81)
位于jdk.naming.dns/com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:434)
位于java.naming/com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:235)
位于java.naming/com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:141)
位于java.naming/com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:129)
在java.naming/javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:171)中
在com.mongodb.internal.dns.DefaultDnsResolver.resolveAdditionalQueryParametersFromTxtRecords上(DefaultDnsResolver.java:114)
... 3个以上
原因:java.net.SocketTimeoutException:接收超时
位于java.base/java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(本机方法)
位于java.base/java.net.DualStackPlainDatagramSocketImpl.receive0(DualStackPlainDatagramSocketImpl.java:124)
位于java.base/java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:182)
位于java.base/java.net.DatagramSocket.receive(DatagramSocket.java:815)
位于jdk.naming.dns/com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:423)
位于jdk.naming.dns/com.sun.jndi.dns.DnsClient.query(DnsClient.java:212)
... 10多

此处的相关错误有:

无法查找主机discord-y3bzo.mongodb.net的TXT记录

DNS错误

java.net.SocketTimeoutException:接收超时

这表明您使用的是
mongodb+srv
样式的连接字符串,DnsClient库正在超时,试图查询DNS服务器以获取连接所需的TXT记录


也就是说,这看起来很像DNS解析程序配置、DNS服务器或到DNS服务器的网络连接的问题。

此处的相关错误有:

无法查找主机discord-y3bzo.mongodb.net的TXT记录

DNS错误

java.net.SocketTimeoutException:接收超时

这表明您使用的是
mongodb+srv
样式的连接字符串,DnsClient库正在超时,试图查询DNS服务器以获取连接所需的TXT记录


也就是说,这看起来很像DNS解析程序配置、DNS服务器或到DNS服务器的网络连接的问题。

由于我没有太多的网络问题经验,我应该在哪里更改DNS设置?我使用的是Windows 10。系统DNS解析程序设置将位于网络和共享中心,但Java虚拟机可能使用这些设置,也可能不使用这些设置。由于我对网络问题没有太多经验,我将在哪里更改DNS设置?我使用的是Windows 10。系统DNS解析程序设置将在网络和共享中心中,但Java虚拟机可能使用这些设置,也可能不使用这些设置。
2020-05-22 18:25 [main] CavenBot [INFO ] - Logging into databases...
2020-05-22 18:25 [main] CavenBot [INFO ] - Logging into MongoDB
Exception in thread "main" com.mongodb.MongoConfigurationException: Unable to look up TXT record for host discord-y3bzo.mongodb.net
    at com.mongodb.internal.dns.DefaultDnsResolver.resolveAdditionalQueryParametersFromTxtRecords(DefaultDnsResolver.java:131)
    at com.mongodb.ConnectionString.<init>(ConnectionString.java:378)
    at com.mongodb.client.MongoClients.create(MongoClients.java:61)
    at com.dragons0u1.CavenBot.main(CavenBot.java:37)
Caused by: javax.naming.CommunicationException: DNS error [Root exception is java.net.SocketTimeoutException: Receive timed out]; remaining name 'discord-y3bzo.mongodb.net'
    at jdk.naming.dns/com.sun.jndi.dns.DnsClient.query(DnsClient.java:313)
    at jdk.naming.dns/com.sun.jndi.dns.Resolver.query(Resolver.java:81)
    at jdk.naming.dns/com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:434)
    at java.naming/com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:235)
    at java.naming/com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:141)
    at java.naming/com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:129)
    at java.naming/javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:171)
    at com.mongodb.internal.dns.DefaultDnsResolver.resolveAdditionalQueryParametersFromTxtRecords(DefaultDnsResolver.java:114)
    ... 3 more
Caused by: java.net.SocketTimeoutException: Receive timed out
    at java.base/java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)
    at java.base/java.net.DualStackPlainDatagramSocketImpl.receive0(DualStackPlainDatagramSocketImpl.java:124)
    at java.base/java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:182)
    at java.base/java.net.DatagramSocket.receive(DatagramSocket.java:815)
    at jdk.naming.dns/com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:423)
    at jdk.naming.dns/com.sun.jndi.dns.DnsClient.query(DnsClient.java:212)
    ... 10 more