在等待与 WritableServerSelector 匹配的服务器时超时 30000 毫秒
Posted
技术标签:
【中文标题】在等待与 WritableServerSelector 匹配的服务器时超时 30000 毫秒【英文标题】:timed out after 30000 ms while waiting for a server that matches WritableServerSelector 【发布时间】:2016-11-18 16:33:12 【问题描述】:我在很多论坛上都看到过这个问题,但没有一个能解决我的问题。我正在尝试将示例文档插入 MongoDB DB。不幸的是,在插入过程中colReceived.insert(doc)
出现以下错误:
严重:servlet spring 的 Servlet.service() 抛出异常 com.mongodb.MongoTimeoutException:在 30000 毫秒后超时,而 等待与 WritableServerSelector 匹配的服务器。客户端视图 集群状态为 type=UNKNOWN, servers=[address=localhost:27017, 类型=未知,状态=连接, exception=com.mongodb.MongoSocketOpenException: 异常开启 socket,由 java.net.ConnectException: Connection refused: 连接] 在 com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster.java:369)
这是我的 connectToDb 方法
MongoClient mongoClient = new MongoClient();
// Now connect to your database
DB db = mongoClient.getDB("test");
System.out.println("connect to database successfully");
DBCollection coll = db.createCollection("mycol", null);
System.out.println("Collection created successfully");
DBCollection colReceived = db.getCollection("mycol");
System.out.println("Collection mycol selected successfully");
BasicDBObject doc = new BasicDBObject("title", "MongoDB").append("description", "database").append("likes", 100)
.append("url", "http://www.tutorialspoint.com/mongodb/").append("by", "tutorials point");
colReceived.insert(doc);
System.out.println("Document inserted successfully");
我的 pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.objectdb.tutorial.spring</groupId>
<artifactId>Guestbook</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>Guestbook</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>objectdb</id>
<name>ObjectDB Repository</name>
<url>http://m2.objectdb.com</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.objectdb</groupId>
<artifactId>objectdb</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.10</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>enhance</id>
<phase>process-classes</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.objectdb.Enhancer</mainClass>
<arguments>
<argument>guest.Guest</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.10</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<finalName>Guestbook</finalName>
</build>
【问题讨论】:
你解决了吗? 是的,几个月前我自己解决了这个问题 你是怎么解决的?你能回答你的问题并接受它吗? 【参考方案1】:如果您的 mongod 日志中也出现以下错误...(或类似)
错误:日志文件的可用空间不足 请至少使 /var/lib/mongodb/journal 中可用 3379MB 或使用 --smallfiles
您可以通过以 mongod --smallfiles
运行 mongo 来修复此错误
否则,请尝试更新您的 mongo-driver 版本以匹配您正在运行的服务器的版本。
【讨论】:
【参考方案2】:遇到同样的问题,在我的情况下,我使用的是 Atlas MongoDB,而我的 ISP 正在随机时间间隔为客户端轮换 IP 池。
所以我遇到了同样的错误,解决方案是将实际 IP 地址添加到 IP 白名单。
【讨论】:
【参考方案3】:当我尝试在 Mongo 集合上执行 update
时,我使用了 same exception
。
我的问题是我使用的是replica sets
,而连接字符串指向Secondary cluster
。因此,我能够从集群中读取数据,但无法执行写入(插入、更新)操作。因此,将连接字符串更改为指向 Primary Cluster
为我解决了这个问题。
【讨论】:
以上是关于在等待与 WritableServerSelector 匹配的服务器时超时 30000 毫秒的主要内容,如果未能解决你的问题,请参考以下文章