gpt4 book ai didi

c++ - Mongodb C++ 驱动程序 - 如何更改超时配置

转载 作者:行者123 更新时间:2023-11-30 03:16:08 29 4
gpt4 key购买 nike

如何更改可能因服务器无法访问而失败的不同操作的超时持续时间? (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() 操作中查看实际错误消息会很有帮助,但“大约需要 30 秒才能失败”表明这可能是由于默认服务器选择超时造成的。您可以通过 serverSelectionTimeoutMS 配置它连接字符串选项。

如果您要连接到一个拷贝集,我建议将该超时设置为比故障转移完成的预期时间稍高一些。 Replica Set Elections状态:

The median time before a cluster elects a new primary should not typically exceed 12 seconds

您可能会发现这在实践中更短。通过将服务器选择超时保持在预期的故障转移时间之上,您将允许驱动程序将您的应用程序与错误隔离开来(以等待时间为代价)。

如果您没有连接到拷贝集,请随意将 serverSelectionTimeoutMS 降低到一个较低的值,尽管它仍然大于您的 mongod 的预期延迟(独立)或 mongos(分片集群)节点。

请注意,由于服务器选择发生 within a loop , connectTimeoutMS连接字符串选项不会影响您看到的延迟。降低连接超时将允许驱动程序在尝试连接到无法访问的服务器时在内部放弃,但服务器选择仍将阻塞最多 serverSelectionTimeoutMS(并可能在该循环期间重试连接到服务器).

关于c++ - Mongodb C++ 驱动程序 - 如何更改超时配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56573935/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com