如何检查GoCQL中的Session对象是否与Redis中的PING连接类似?

i34xakig  于 2022-09-27  发布在  Go
关注(0)|答案(2)|浏览(149)

使用gocql库创建了一个cassandra集群。

func CreateCassandraCluster(host string) (*gocql.Session, error) {
cluster := gocql.NewCluster(host)
cluster.ConnectTimeout = time.Second * 10
cluster.DisableInitialHostLookup = true
session, err := cluster.CreateSession()
if err != nil {
return session, err
}
return session, nil
}

我的目标是用gocql做一个函数。会话作为一个参数,将在传递任何cassandra集群的会话时检查它是否已连接?对于redis,我们有PING查询来确定redis是否已连接,对于使用gocql的cassandra,我们有类似的东西吗?

6tdlim6h

6tdlim6h1#

这看起来和你昨天问的问题一样,虽然我现在似乎找不到,所以我想知道你是否删除了它。
我不清楚你想实现什么。对于Cassandra,检查会话是否已连接没有帮助。
当驱动程序第一次建立到集群的连接时,它使用您传入NewCluster()的主机进行初始连接,以发现其余节点和集群拓扑(机架配置、数据中心),然后建立到节点的连接。
如果连接失败,驱动程序中的默认策略足够聪明,可以自动重新连接,因此复制此功能是毫无意义的。
正如我在您的另一个问题中所指出的,如果您的最终目标是监视Cassandra集群的健康状况,那么最好使用免费开源工具,如Metric Collector for Apache Cassandra (MCAC)。干杯

bqf10yzr

bqf10yzr2#

尝试了这种方法,我们只需检查会话的打开或关闭

func CheckCassandraHealthCheck(Pool interface{}, Host string, Port int) map[string]interface{} {
response := make(map[string]interface{})
response1 := make(map[string]interface{})
cassandraCluster := Pool.(*gocql.Session)
response["type"] = 4
response1["host"] = Host
response1["PORT"] = Port

if cassandraCluster != nil && !cassandraCluster.Closed() {
    response["STATUS"] = constant.UP
    response["DETAILS"] = response1

    return response
}
response["DETAILS"] = response1
response["STATUS"] = constant.DOWN
return response

不确定这是不是正确的方法

相关问题