我收到错误: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);
但这并不能解决问题。
对这个问题有什么见解吗?
上述问题并非连接池问题,与Azure中的资源配置有关。在管道中运行时,与自托管代理的公共数据库链接存在一些问题。有 Mongo DB 的私有链接并在管道中运行时连接到它解决了问题。