【问题标题】:Connection to MongoDB Atlas from Azure Tomcat Webapp: Unable to look up SRV record for host从 Azure Tomcat Webapp 连接到 MongoDB Atlas:无法查找主机的 SRV 记录
【发布时间】:2021-10-05 00:12:59
【问题描述】:

我有一个 Azure Webapp,在 Tomcat 8.5 上运行。该应用程序使用 MongoDB 进行持久化。我有一个免费的 MongoDB Atlas 计划,应该为该应用程序提供服务。

当我从本地 Tomcat 运行应用程序(连接到相同的、基于 Web 的 Atlas 集群)时,一切正常。将应用程序部署到 Azure 后,出现以下异常:

com.mongodb.MongoConfigurationException: Unable to look up SRV record for host cluster0-xxxxx.mongodb.net

我正在使用以下连接字符串(也试过不带参数):

mongodb+srv://admin:xxxxx@cluster0-xxxxx.mongodb.net/msapi?ssl=true&connectTimeoutMS=60000&socketTimeoutMS=60000

和下面的代码创建一个连接:

MongoClient mongoClient = new MongoClient(new MongoClientURI(mongoConnectionString));

我已将 MongoDB 服务器上的 0.0.0.0/0 列入白名单。

想不出还有什么可以尝试的。

完整日志:

07-Apr-2018 20:38:19.323 SEVERE [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log StandardWrapper.Throwable
 com.mongodb.MongoConfigurationException: Unable to look up SRV record for host cluster0-ot7ig.mongodb.net
	at com.mongodb.internal.dns.DnsResolver.resolveHostFromSrvRecords(DnsResolver.java:79)
	at com.mongodb.ConnectionString.<init>(ConnectionString.java:321)
	at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:234)
	at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:216)
	at com.idog.vis.academicvisapi.VisServerAppResources.getMongoClient(VisServerAppResources.java:128)
	at com.idog.vis.academicvisapi.VisServerAppResources.<init>(VisServerAppResources.java:92)
	at com.idog.vis.academicvisapi.VisServerAppBinder.configure(VisServerAppBinder.java:19)
	at org.glassfish.hk2.utilities.binding.AbstractBinder.bind(AbstractBinder.java:187)
	at org.glassfish.hk2.utilities.ServiceLocatorUtilities.bind(ServiceLocatorUtilities.java:187)
	at org.glassfish.jersey.inject.hk2.ImmediateHk2InjectionManager.register(ImmediateHk2InjectionManager.java:88)
	at java.lang.Iterable.forEach(Iterable.java:75)
	at org.glassfish.jersey.model.internal.CommonConfig.configureExternalObjects(CommonConfig.java:664)
	at org.glassfish.jersey.model.internal.CommonConfig.configureMetaProviders(CommonConfig.java:633)
	at org.glassfish.jersey.server.ResourceConfig.configureMetaProviders(ResourceConfig.java:823)
	at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:351)
	at org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$1(ApplicationHandler.java:316)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:316)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:298)
	at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:256)
	at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:315)
	at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:282)
	at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:335)
	at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178)
	at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370)
	at javax.servlet.GenericServlet.init(GenericServlet.java:158)
	at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4931)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5241)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: javax.naming.CommunicationException: DNS error [Root exception is java.net.SocketTimeoutException: Receive timed out]; remaining name '_mongodb._tcp.cluster0-ot7ig.mongodb.net'
	at com.sun.jndi.dns.DnsClient.query(DnsClient.java:309)
	at com.sun.jndi.dns.Resolver.query(Resolver.java:81)
	at com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:434)
	at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:235)
	at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:141)
	at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:129)
	at javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:142)
	at com.mongodb.internal.dns.DnsResolver.resolveHostFromSrvRecords(DnsResolver.java:60)
	... 39 more
Caused by: java.net.SocketTimeoutException: Receive timed out
	at java.net.TwoStacksPlainDatagramSocketImpl.receive0(Native Method)
	at java.net.TwoStacksPlainDatagramSocketImpl.receive(TwoStacksPlainDatagramSocketImpl.java:114)
	at java.net.DatagramSocket.receive(DatagramSocket.java:812)
	at com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:418)
	at com.sun.jndi.dns.DnsClient.query(DnsClient.java:208)
	... 46 more

07-Apr-2018 20:38:19.323 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.loadOnStartup Servlet [com.idog.vis.academicvisapi.VisServerApp] in web application [/AcademicVisAPI] threw load() exception
 java.net.SocketTimeoutException: Receive timed out
	at java.net.TwoStacksPlainDatagramSocketImpl.receive0(Native Method)
	at java.net.TwoStacksPlainDatagramSocketImpl.receive(TwoStacksPlainDatagramSocketImpl.java:114)
	at java.net.DatagramSocket.receive(DatagramSocket.java:812)
	at com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:418)
	at com.sun.jndi.dns.DnsClient.query(DnsClient.java:208)
	at com.sun.jndi.dns.Resolver.query(Resolver.java:81)
	at com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:434)
	at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:235)
	at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:141)
	at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:129)
	at javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:142)
	at com.mongodb.internal.dns.DnsResolver.resolveHostFromSrvRecords(DnsResolver.java:60)
	at com.mongodb.ConnectionString.<init>(ConnectionString.java:321)
	at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:234)
	at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:216)
	at com.idog.vis.academicvisapi.VisServerAppResources.getMongoClient(VisServerAppResources.java:128)
	at com.idog.vis.academicvisapi.VisServerAppResources.<init>(VisServerAppResources.java:92)
	at com.idog.vis.academicvisapi.VisServerAppBinder.configure(VisServerAppBinder.java:19)
	at org.glassfish.hk2.utilities.binding.AbstractBinder.bind(AbstractBinder.java:187)
	at org.glassfish.hk2.utilities.ServiceLocatorUtilities.bind(ServiceLocatorUtilities.java:187)
	at org.glassfish.jersey.inject.hk2.ImmediateHk2InjectionManager.register(ImmediateHk2InjectionManager.java:88)
	at java.lang.Iterable.forEach(Iterable.java:75)
	at org.glassfish.jersey.model.internal.CommonConfig.configureExternalObjects(CommonConfig.java:664)
	at org.glassfish.jersey.model.internal.CommonConfig.configureMetaProviders(CommonConfig.java:633)
	at org.glassfish.jersey.server.ResourceConfig.configureMetaProviders(ResourceConfig.java:823)
	at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:351)
	at org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$1(ApplicationHandler.java:316)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:316)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:298)
	at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:256)
	at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:315)
	at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:282)
	at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:335)
	at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178)
	at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370)
	at javax.servlet.GenericServlet.init(GenericServlet.java:158)
	at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4931)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5241)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

07-Apr-2018 20:38:21.166 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()
07-Apr-2018 20:38:21.166 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
07-Apr-2018 20:38:21.994 SEVERE [http-nio-23668-exec-2] org.apache.catalina.core.ApplicationContext.log StandardWrapper.Throwable
 java.lang.IllegalStateException: The resource configuration is not modifiable in this context.
	at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:270)
	at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:217)
	at org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:450)
	at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:330)
	at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178)
	at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370)
	at javax.servlet.GenericServlet.init(GenericServlet.java:158)
	at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:795)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)

07-Apr-2018 20:38:22.010 SEVERE [http-nio-23668-exec-2] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet [com.idog.vis.academicvisapi.VisServerApp]
 java.lang.IllegalStateException: The resource configuration is not modifiable in this context.
	at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:270)
	at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:217)
	at org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:450)
	at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:330)
	at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178)
	at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370)
	at javax.servlet.GenericServlet.init(GenericServlet.java:158)
	at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:795)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)

【问题讨论】:

  • 你解决过这个问题吗?我正在经历同样的事情。
  • 没有。决定使用其他解决方案。
  • @IdoGal 很高兴为未来的读者提供有关“其他解决方案”的一些详细信息。

标签: java mongodb azure mongodb-atlas srv-record


【解决方案1】:

刚刚遇到同样的问题。不确定是什么阻止了 SRV 查找,但作为一种解决方法,您可以使用不使用 SRV 记录的旧形式的 MongoDB 连接字符串。

只需查找 3.6 版之前的 MongoDB 连接字符串。它应该看起来像这样:

mongodb://&lt;username&gt;:&lt;password&gt;@&lt;shard-1&gt;:27017,&lt;shard2&gt;:27017,&lt;shard3&gt;:27017/&lt;dbname&gt;?ssl=true&amp;replicaSet=&lt;replica set&gt;&amp;authSource=admin&amp;retryWrites=true&amp;w=majority

【讨论】:

    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2020-09-13
    • 2019-06-08
    相关资源
    最近更新 更多