Я прочитал в Интернете, что при использовании Cassandra лучше всего иметь 1 Cluster
и 1 Session
на весь срок службы.
Мои вопросы:
В случае, если наш сервер Cassandra выходит из строя, как мне убедиться, что мой Кластер и / или Сессия будут пытаться повторно подключиться, пока наш сервер Cassandra не вернется в рабочее состояние?
Должен ли только кластер пытаться повторно подключиться, или только сеанс, или оба?
Мы используем Go
и github.com / gocql / gocql service.
В документации gocql
я видел следующий фрагмент кода, но, похоже, количество повторов ограничено:
cluster.ReconnectionPolicy = &gocql.ConstantReconnectionPolicy{MaxRetries: 10, Interval: 8 * time.Second}
В Интернете я также нашел следующий фрагмент кода, но не похоже, что он предназначен для обработки этого сценария:
var cluster *gocql.ClusterConfig
var session *gocql.Session
func getCassandraSession() *gocql.Session {
if session == nil || session.Closed() {
if cluster == nil {
cluster = gocql.NewCluster("127.0.0.1:9042")
cluster.Keyspace = "demodb"
cluster.Consistency = gocql.One
cluster.ProtoVersion = 4
}
var err error
if session, err = cluster.CreateSession(); err != nil {
panic(err)
}
}
return session
}
Достаточен ли какой-либо из перечисленных выше методов для обеспечения попытки повторного подключения до тех пор, пока наш сервер Cassandra не вернется в рабочее состояние?А если нет, какова лучшая практика для этого сценария?