com.mongodb.MongoTimeoutException:等待连接时在30000毫秒后超时。群集状态的客户端视图为{type=UNKNOWN,servers=[]

com.mongodb.MongoTimeoutException:等待连接时在30000毫秒后超时。群集状态的客户端视图为{type=UNKNOWN,servers=[],mongodb,spring-data-mongodb,Mongodb,Spring Data Mongodb,我们正在尝试使用Java代码连接到Mongo Atlas URI“mongodb+srv::@serveraddress/dbname?retryWrites=true&w=1”但正在获取MongoTimeoutException异常 奇怪的是,这里的异常跟踪服务器=[]列表为空 这一错误的可能原因是什么 MongoDB服务器和Java驱动程序详细信息: MongoDB服务器:4.2 MongoDB java驱动程序:3.12.5 spring数据mongodb:2.1.5.0版本 如果需要更多

我们正在尝试使用Java代码连接到Mongo Atlas

URI“mongodb+srv::@serveraddress/dbname?retryWrites=true&w=1”但正在获取MongoTimeoutException异常

奇怪的是,这里的异常跟踪服务器=[]列表为空

这一错误的可能原因是什么

MongoDB服务器和Java驱动程序详细信息:

MongoDB服务器:4.2

MongoDB java驱动程序:3.12.5

spring数据mongodb:2.1.5.0版本

如果需要更多信息,请告诉我

谢谢你的帮助

com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[]
    at com.mongodb.internal.connection.BaseCluster.getDescription(BaseCluster.java:182)
    at com.mongodb.internal.connection.AbstractMultiServerCluster.getDescription(AbstractMultiServerCluster.java:54)
    at com.mongodb.client.internal.MongoClientDelegate.getConnectedClusterDescription(MongoClientDelegate.java:152)
    at com.mongodb.client.internal.MongoClientDelegate.createClientSession(MongoClientDelegate.java:103)
    at com.mongodb.Mongo.createClientSession(Mongo.java:832)
    at com.mongodb.MongoClient.startSession(MongoClient.java:582)
    at com.mongodb.MongoClient.startSession(MongoClient.java:569)
    at com.shutterfly.services.project.InitMongoDBCollection.onApplicationEvent(InitMongoDBCollection.java:36)
    at com.shutterfly.services.project.InitMongoDBCollection.onApplicationEvent(InitMongoDBCollection.java:20)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:402)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:359)
    at org.springframework.boot.context.event.EventPublishingRunListener.running(EventPublishingRunListener.java:105)
    at org.springframework.boot.SpringApplicationRunListeners.running(SpringApplicationRunListeners.java:78)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:332)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
    at com.shutterfly.services.project.Application.main(Application.java:18)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
    at java.lang.Thread.run(Thread.java:748)

添加答案,以便对其他人有所帮助,他们将来可能会看到类似的问题

我们已经解决了这个问题,问题是找到集群列表并使用默认时间连接到该列表需要时间,我们可以使用“mongoclientationsfactorybean”自定义参数并覆盖默认配置

@Bean
public MongoClientOptionsFactoryBean getMongoClientOptionsFactoryBean() {
        MongoClientOptionsFactoryBean mongoClientOptionsFactoryBean = new MongoClientOptionsFactoryBean();
        mongoClientOptionsFactoryBean.setConnectTimeout(timeout);
        mongoClientOptionsFactoryBean.setConnectionsPerHost(connectionsPerHost);
        mongoClientOptionsFactoryBean.setMaxWaitTime(maxWaitTime);
        mongoClientOptionsFactoryBean.setServerSelectionTimeout(ServerSelectionTimeout);
        mongoClientOptionsFactoryBean.setThreadsAllowedToBlockForConnectionMultiplier(connMultiplier);
        return mongoClientOptionsFactoryBean;
    }

在我的情况下,mongo根本没有运行:)

请检查:

systemctl status mongod.service
并确保在重新启动服务器之前已启用:

systemctl enable mongod.service

这是否回答了您的问题?现在已经解决了,实际问题是实例连接到Mongo Atlas服务器所花费的时间超过了预期。实例在连接成功之前停止,并以连接超时问题结束。我保留此问题,因此如果有人面临此类问题,他们应该查看你好,Deepak,我看到了同样的例外。支持istio的服务(springboot应用程序)正在尝试调用同一集群中另一个pod中启用istio的mogodb。当启用istio的应用程序容器出现时,它表示已建立到Mongo的连接。但当发送请求时,会看到异常。您的任何输入。有两点:1.您的数据库是否已分片?2.您是否使用任何可能导致此问题的java注释e问题。我遇到了一个问题,我使用了@Indexed annotation,并且在删除后得到了解决。3.还要确保MongoDB/mongos服务正在运行。不,它没有切分。没有java特定的注释和索引。不,它没有切分,没有java特定的注释和索引。Mongod正在运行。在我的例子中,Istio服务网格已为mongodb容器启用(特使pxoxy)。在同一集群中,当来自Istio启用的pod的请求命中isto启用的mongodb pod时,出现该错误。以另一种方式,如何为集群内mongodb?配置服务网格。谢谢。它们位于相同的N/W和mongodb中(istioservice网格已启用)作为saperate容器运行。在服务定义中使用appProtocol和端口名为mongo mongodb后,它就可以工作了。