如何处理Cassandra丢失的连接?

时间:2017-08-21 21:46:49

标签: c++ datastax cassandra-3.0

我对使用DataStax C ++驱动程序的Cassandra Development相当陌生。我目前正在使用Cassandra 3.9和DataStax C ++驱动程序2.6。在我的C ++应用程序中,我试图捕获驱动程序丢失了它与Cassandra的连接然后让应用程序重新尝试与Cassandra建立连接的情况。我这样做如下:

  1. 通过检查cass_future_error_code(连接)!= CASS_OK来执行查询之前捕获丢失的连接。如果结果为真,那么我知道连接丢失了。
  2. 我关闭会话,释放会话,释放群集以释放资源。
  3. 我重新创建资源并尝试重新连接到Cassandra。
  4. 此方法将在单独的线程中重复,直到重新建立连接。我已经通过关闭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的丢失连接并实施连接重试?任何示例或指向示例的指针都将非常感激。

1 个答案:

答案 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。当驱动程序检测到节点已关闭时,它将自动尝试重新连接。