gpt4 book ai didi

go - ElasticClient Olivere 包维护与先前部署的 ECS 集群的长期连接

转载 作者:行者123 更新时间:2023-12-01 19:00:08 27 4
gpt4 key购买 nike

我们目前正在创建 olivere我们 API 中的弹性客户端如下所示:

        elasticClient, err = elastic.NewClient(
elastic.SetURL(elasticSearchUrl),
elastic.SetSniff(false),
)

if err != nil {
logger.ApplicationError(err)
time.Sleep(3 * time.Second)
} else {
logger.Information("ElasticSearch: connected")
return elasticClient
}
...

然后,单实例客户端将用于所有传入的 API 请求。

但是,重新部署新的 Elastic 集群后,连接似乎仍然指向旧实例,因为 elasticSearchUrl 仅在初始连接中使用了一次。

这会在部署新的弹性集群时产生问题,因为需要新的连接。

使用此库重新连接到新的 Elastic Search 集群的最佳方式是什么?

最佳答案

原因是 golang 默认使用长连接。您可以通过在 Transport 中设置 DisableKeepAlives 来禁用它。

var httpClient = &http.Client{
Timeout: 60 * time.Second,
Transport: &http.Transport{
// Disabel long-live connection
DisableKeepAlives: true,
// This is to avoid the time_wait in connections
MaxIdleConnsPerHost: -1,
},
}

elasticClient, err = elastic.NewClient(
elastic.SetURL(elasticSearchUrl),
elastic.SetSniff(false),
elastic.SetHttpClient(httpClient),
)
...

关于go - ElasticClient Olivere 包维护与先前部署的 ECS 集群的长期连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57917357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com