MongoDB C++驱动程序处理副本集连接故障
MongoDB C++ driver handling replica set connection failures
所以mongo c++文档说
在故障切换情况下,至少需要一个操作返回故障转移完成之前发生错误(引发异常)。操作未重试
有点烦人,但这让我来处理一个失败的操作。理想情况下,我只希望应用程序睡眠几秒钟(应用程序是单线程的)。再试一次,希望建立一个新的初级mongod。在第二次失败的情况下,我认为连接真的很糟糕,我只想抛出一个异常。
在我的MongoDB Manager类中,这意味着所有操作都设置了这种双重try/catch块。我想知道是否有更优雅的解决方案?
示例方法:
template <typename T>
std::string
MongoManager::insert(std::string ns, T object)
{
mongo::BSONObj = convertToBson(object);
std::string result;
try {
connection_->insert(ns, oo); //connection_ = shared_ptr<DBClientReplicaSet>
result = connection_->getLastError();
lastOpSucceeded_ = true;
}
catch (mongo::SocketException& ex)
{
lastOpSucceeded_ = false;
boost::this_thread::sleep( boost::posix_time::seconds(5) );
}
// try again?
if (!lastOpSucceeded_) {
try {
connection_->insert(ns, oo);
result = connection_->getLastError();
lastOpSucceeded_ = true;
}
catch (mongo::SocketException& ex)
{
//do some clean up, throw exception
}
}
return result;
}
这确实是你需要处理的方式。也许我会使用以下策略来代替两个try/catch块:
- 记下你试了多少次
- 使用作为终止符创建while循环(count<5&&lastOpSuccessed)
- 然后使用pow(2,count)进行睡眠,以便在每次迭代中睡得更多
然后,当其他一切都失败时,就退出。
相关文章:
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- 当套接字连接断开时检测C/C++Unix
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 调试 CUDA MMU 故障
- 聊天应用程序-从客户端连接到服务器时出现故障
- Qt 信号在连接时导致分段故障
- ASIO 客户端服务器在同一台 PC 上连接正常,但在本地网络上出现故障
- MongoDB C++驱动程序处理副本集连接故障
- 连接解决方案中的故障
- 蓝牙连接故障