【发布时间】:2018-01-30 01:17:49
【问题描述】:
我对使用 DataStax C++ 驱动程序的 Cassandra 开发相当陌生。我目前正在使用 Cassandra 3.9 和 DataStax C++ 驱动程序 2.6。在我的 C++ 应用程序中,我试图捕捉驱动程序失去与 Cassandra 的连接的情况,然后让应用程序重新尝试与 Cassandra 建立连接。我这样做如下:
- 通过检查 cass_future_error_code(connection) != CASS_OK 在执行查询之前捕获丢失的连接。如果结果为真,那么我知道连接丢失了。
- 我关闭会话,释放会话,释放集群以释放资源。
- 我重新创建资源并尝试重新连接到 Cassandra。
这种方法将在一个单独的线程中重复,直到重新建立连接。我通过关闭 Cassandra 服务器对此进行了测试。我曾预计应用程序会继续重试建立连接,直到 Cassandra 服务器可以重新启动并建立连接。但是,发生的事情是驱动程序抛出以下错误并且我的应用程序终止:
1503345418.300 [WARN] (src/control_connection.cpp:267:virtual void cass::ControlConnection::on_close(cass::Connection*)): Lost control connection to host xx.xx.xx.xx with the following error: Read error 'connection reset by peer'
1503345418.300 [ERROR] (src/pool.cpp:384:virtual void cass::Pool::on_close(cass::Connection*)): Closing established connection pool to host xx.xx.xx.xx because of the following error: Read error 'connection reset by peer'
Error: Request timed out
有没有更好的方法来处理丢失的 Cassandra 连接并实现连接重试?任何示例或指向示例的指针将不胜感激。
【问题讨论】:
标签: c++ datastax cassandra-3.0