com.mongodb.MongoTimeoutException:等待匹配的服务器时 30000 毫秒后超时

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

我收到错误:com.mongodb.MongoTimeoutException:等待与 com.mongodb.client.internal.MongoClientDelegate 匹配的服务器时,30000 毫秒后超时。集群状态的客户端视图为 {type=REPLICA_SET,servers=[{address=serveraddress:27017,type=UNKNOWN,state=CONNECTING,Exception={com.mongodb.MongoSocketOpenException: 异常打开套接字}

在一个mongo集群中,一共有三个节点,一个主节点,两个辅助节点。运行 BDD 测试用例时,首先连接 mongodb。然而,15 分钟后,尝试连接集群中的所有三个节点时,出现 MongoTimeOutException。

尝试设置,

 MongoClientSettings settings = MongoClientSettings.builder()
            .applyToClusterSettings(builder ->
                builder
                    .applyConnectionString(new ConnectionString(dbPath))
            )
            .applyToConnectionPoolSettings(builder ->
                builder
                    .maxConnectionIdleTime(MAX_CONNECTION_IDLE_TIME, TimeUnit.MILLISECONDS)
                    .maxWaitTime(MAX_WAIT_TIME, TimeUnit.MILLISECONDS)
                    .minSize(MIN_CONNECTIONS_PER_HOST)
                    .applyConnectionString(new ConnectionString(dbPath))
            )
            .applyToSocketSettings(builder ->
                builder
                    .connectTimeout((int) CONNECT_TIMEOUT.toMillis(), TimeUnit.MILLISECONDS)
                    .readTimeout((int) READ_TIMEOUT.toMillis(), TimeUnit.MILLISECONDS)
                    .applyConnectionString(new ConnectionString(dbPath))
            )
            .applyConnectionString(new ConnectionString(dbPath))
            .build(); 

变量设置为,

long MAX_CONNECTION_IDLE_TIME = 60000; // 60 seconds
long MAX_WAIT_TIME = 10000; // 10 seconds
int MIN_CONNECTIONS_PER_HOST = 5;
Duration CONNECT_TIMEOUT = Duration.of(60, ChronoUnit.SECONDS);
Duration READ_TIMEOUT = Duration.of(60, ChronoUnit.SECONDS);

但这并不能解决问题。

对这个问题有什么见解吗?

mongodb spring-boot cucumber bdd
1个回答
0
投票

上述问题并非连接池问题,与Azure中的资源配置有关。在管道中运行时,与自托管代理的公共数据库链接存在一些问题。有 Mongo DB 的私有链接并在管道中运行时连接到它解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.