Я довольно новичок в разработке Cassandra, использующей драйвер DataStax C ++. В настоящее время я использую Cassandra 3.9 и драйвер DataStax C ++ 2.6. В моем приложении C ++ я пытаюсь отловить ситуации, когда драйвер потерял соединение с Cassandra, а затем повторять попытку приложения установить соединение с 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 и осуществить повторную попытку соединения? Любые примеры или указатели на пример будут с благодарностью.
Драйвер 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. Когда драйвер обнаруживает, что узел вышел из строя, он автоматически попытается восстановить соединение.
Других решений пока нет …