我对使用DataStax C ++驱动程序的Cassandra Development相当陌生。我目前正在使用Cassandra 3.9和DataStax C ++驱动程序2.6。在我的C ++应用程序中,我试图捕获驱动程序丢失了它与Cassandra的连接然后让应用程序重新尝试与Cassandra建立连接的情况。我这样做如下:
此方法将在单独的线程中重复,直到重新建立连接。我已经通过关闭Cassandra服务器测试了这个。我原本以为应用程序会继续重试建立连接,直到可以重新启动Cassandra Server并建立连接。但是,发生的事情是驱动程序抛出了以下错误并且我的应用程序终止了:
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的丢失连接并实施连接重试?任何示例或指向示例的指针都将非常感激。
答案 0 :(得分:0)
DataStax C / C ++驱动程序自动处理重新连接。 cass_cluster_set_reconnect_wait_time(Cluster*, time_in_ms)
可用于限制重新连接尝试(默认为2秒); https://github.com/datastax/cpp-driver/blob/2.6.0/include/cassandra.h#L1080-L1092。当驱动程序检测到节点已关闭时,它将自动尝试重新连接。