【发布时间】:2021-10-26 02:39:36
【问题描述】:
我正在使用 Azure 部署我的服务,该服务将与 MongoDB 对话。
以前,我使用的是 Azure Linux App Service,一切正常。 但是,我正在尝试将我的服务部署到 Azure Windows App Service,但它会出现 DNS 问题。错误日志如下:
org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.mongodb.client.MongoClient]: Factory method 'mongoClient' threw exception; nested exception is com.mongodb.MongoConfigurationException: Unable to look up TXT record for host cluster0.xe4in.mongodb.net
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)... 218 more
Caused by: com.mongodb.MongoConfigurationException: Unable to look up TXT record for host cluster0.xe4in.mongodb.net
at com.mongodb.internal.dns.DefaultDnsResolver.resolveAdditionalQueryParametersFromTxtRecords(DefaultDnsResolver.java:131)
at com.mongodb.ConnectionString.<init>(ConnectionString.java:384)
at com.leland.config.MongoConfig.buildMongoClientSettings(MongoConfig.java:49)
at com.leland.config.MongoConfig.mongoClient(MongoConfig.java:45)
at com.leland.config.MongoConfig$$EnhancerBySpringCGLIB$$df102bd2.CGLIB$mongoClient$14(<generated>)
at com.leland.config.MongoConfig$$EnhancerBySpringCGLIB$$df102bd2$$FastClassBySpringCGLIB$$11b79bd1.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
at com.leland.config.MongoConfig$$EnhancerBySpringCGLIB$$df102bd2.mongoClient(<generated>)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)... 219 more
Caused by: javax.naming.CommunicationException: DNS error [Root exception is java.net.SocketTimeoutException: Receive timed out]; remaining name 'cluster0.xe4in.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:142)
at com.mongodb.internal.dns.DefaultDnsResolver.resolveAdditionalQueryParametersFromTxtRecords(DefaultDnsResolver.java:114)... 232 more
Caused by: java.net.SocketTimeoutException: Receive timed out
at java.base/java.net.TwoStacksPlainDatagramSocketImpl.receive0(Native Method)
at java.base/java.net.TwoStacksPlainDatagramSocketImpl.receive(TwoStacksPlainDatagramSocketImpl.java:123)
at java.base/java.net.DatagramSocket.receive(DatagramSocket.java:814)
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)... 239 more
在主机上使用 SSH 时,我还看到它无法解析 dns 记录,无论是 8.8.8.8 还是 1.1.1.1: enter image description here
我的连接字符串是这样的:mongodb+srv://xxxx:xxxxxxxxxxx@cluster0.xe4in.mongodb.net/db?retryWrites=true&w=majority
有人对此有任何线索吗?
谢谢!
【问题讨论】:
-
测试看能否查到TXT记录:
nslookup -type=SRV _mongodb._tcp.cluster0.xe4in.mongodb.net和TXT记录nslookup -type=TXT .cluster0.xe4in.mongodb.net
标签: mongodb azure dns azure-web-app-service azure-appservice