Mongo C++ 驱动程序 - 如何更改超时配置
Mongo C++ Driver - How to Change Timeout Configurations
如何更改可能因服务器无法访问而失败的不同操作的超时持续时间? (start_session
, insert
, find
, delete
, update
, ...)
...
auto pool = mongocxx::pool(mongocxx::uri("bad_uri"), pool_options);
auto connection = pool.try_acquire();
auto db = (*(connection.value()))["test_db"];
auto collection = db["test_collection"];
// This does not help
mongocxx::write_concern wc;
wc.timeout(std::chrono::milliseconds(1000));
mongocxx::options::insert insert_options;
insert_options.write_concern(wc);
// takes about 30 seconds to fail
collection.insert_one(from_json(R"({"name": "john doe", "occupation": "_redacted_", "skills" : "a certain set"})"), insert_options);
[编辑]
这是异常消息:
C++ exception with description "No suitable servers found:
serverSelectionTimeoutMS
expired: [connection timeout calling
ismaster on '127.0.0.1:27017']
查看 insert_one()
操作的实际错误消息会很有帮助,但 "takes about 30 seconds to fail" 表明这可能是由于默认服务器选择超时造成的。您可以通过 serverSelectionTimeoutMS
连接字符串选项进行配置。
如果您要连接到副本集,我建议将该超时保持在比故障转移完成的预期时间稍长的时间。 Replica Set Elections 状态:
The median time before a cluster elects a new primary should not typically exceed 12 seconds
您可能会发现实际使用时间更短。通过将服务器选择超时保持在预期的故障转移时间之上,您将允许驱动程序将您的应用程序与错误隔离开来(以等待时间为代价)。
如果您没有连接到副本集,请随意将 serverSelectionTimeoutMS
降低到一个较低的值,尽管仍然大于 mongod
(独立)或 [=14] 的预期延迟=](分片集群)节点。
请注意,由于发生了服务器选择 within a loop, the connectTimeoutMS
连接字符串选项不会影响您看到的延迟。降低连接超时将允许驱动程序在尝试连接到无法访问的服务器时在内部放弃,但服务器选择仍将阻塞最多 serverSelectionTimeoutMS
(并可能在该循环期间重试连接到服务器)。
如何更改可能因服务器无法访问而失败的不同操作的超时持续时间? (start_session
, insert
, find
, delete
, update
, ...)
...
auto pool = mongocxx::pool(mongocxx::uri("bad_uri"), pool_options);
auto connection = pool.try_acquire();
auto db = (*(connection.value()))["test_db"];
auto collection = db["test_collection"];
// This does not help
mongocxx::write_concern wc;
wc.timeout(std::chrono::milliseconds(1000));
mongocxx::options::insert insert_options;
insert_options.write_concern(wc);
// takes about 30 seconds to fail
collection.insert_one(from_json(R"({"name": "john doe", "occupation": "_redacted_", "skills" : "a certain set"})"), insert_options);
[编辑]
这是异常消息:
C++ exception with description "No suitable servers found:
serverSelectionTimeoutMS
expired: [connection timeout calling ismaster on '127.0.0.1:27017']
查看 insert_one()
操作的实际错误消息会很有帮助,但 "takes about 30 seconds to fail" 表明这可能是由于默认服务器选择超时造成的。您可以通过 serverSelectionTimeoutMS
连接字符串选项进行配置。
如果您要连接到副本集,我建议将该超时保持在比故障转移完成的预期时间稍长的时间。 Replica Set Elections 状态:
The median time before a cluster elects a new primary should not typically exceed 12 seconds
您可能会发现实际使用时间更短。通过将服务器选择超时保持在预期的故障转移时间之上,您将允许驱动程序将您的应用程序与错误隔离开来(以等待时间为代价)。
如果您没有连接到副本集,请随意将 serverSelectionTimeoutMS
降低到一个较低的值,尽管仍然大于 mongod
(独立)或 [=14] 的预期延迟=](分片集群)节点。
请注意,由于发生了服务器选择 within a loop, the connectTimeoutMS
连接字符串选项不会影响您看到的延迟。降低连接超时将允许驱动程序在尝试连接到无法访问的服务器时在内部放弃,但服务器选择仍将阻塞最多 serverSelectionTimeoutMS
(并可能在该循环期间重试连接到服务器)。