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

问题描述 投票:0回答:4

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

URI“mongodb+srv::@serveraddress/dbname?retryWrites=true&w=1”但出现 MongoTimeoutException 异常。

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

导致此错误的可能原因是什么?

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

MongoDB 服务器: 4.2

MongoDB java 驱动程序: 3.12.5

spring-data-mongodb:2.1.5.RELEASE

如果需要任何进一步的信息,请告诉我。

谢谢您的帮助。

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)
mongodb spring-data-mongodb
4个回答
2
投票

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

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

@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;
    }

2
投票

在我的例子中 mongo 根本没有运行:)

请检查:

systemctl status mongod.service

并确保在重新启动服务器之前启用它:

systemctl enable mongod.service

0
投票

所以我也有同样的问题 我通过这段代码修复它 使用这个导入

        import com.mongodb.client.MongoClient;

这是代码

        String web="mongodb://";
        MongoClient mongoClient = MongoClients.create(web+ENVIRONMENT);
        database = mongoClient.getDatabase("PUT_HERE_YOUR_DB_NAME");

也许在某些地方您需要更改web

      String web="mongodb+srv://"

0
投票
I am also facing the same issue and below is the complete code i am using in JMeter tool-

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.bson.types.ObjectId;
import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Updates.*;

// MongoDB connection details
def serverAddress = new ServerAddress(vars.get("mongoHost"), vars.get("mongoPort").toInteger())

// MongoDB credential information
def username = vars.get("mongoUsername");
def databasename = vars.get("mongoDatabase");
def password = vars.get("mongoPassword").toCharArray()

def credentials = MongoCredential.createCredential(username, databasename, password)

// Create MongoClient
def mongoClient = new MongoClient(serverAddress, [credentials] as List)

// Connect to the database
def database = mongoClient.getDatabase(databasename)

// Access a collection
def collection = database.getCollection(vars.get("mongoCollection"))


// Document to find

Document result = collection.find(eq("email", vars.get("mail"))).first();
//Document result = collection.await collection.find({});

if (result != null)
{
// Document to update
                //insertOne
    collection.updateOne(eq("email", vars.get("randomEmail")),combine(set("isActive", true)));
    return "User with email=" + vars.get("email") + " modified";
    //return result;
}else
{
    return "No Record Found";
}


// Close MongoDB connection
mongoClient.close()


**error message-**
Response code:500
Response message:javax.script.ScriptException: com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=mongo --host effie-sharedperf-docdb.cluster-cpmjeylhxh2g.us-east-1.docdb.amazonaws.com:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: mongo --host effie-sharedperf-docdb.cluster-cpmjeylhxh2g.us-east-1.docdb.amazonaws.com}, caused by {java.net.UnknownHostException: mongo --host effie-sharedperf-docdb.cluster-cpmjeylhxh2g.us-east-1.docdb.amazonaws.com}}]

SampleResult fields:
ContentType: 
DataEncoding: null
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.