我正在使用Golang& elastic client
Bellow是我的客户创建逻辑:
if client, err := elastic.NewClient(elastic.SetURL(ElasticsearchURL)); err != nil {
// Handle error
logger.Error.Println(err)
return nil
} else {
return client
}
正确的做法是什么:
我对以下链接中违反直觉的答案感到困惑:
答案 0 :(得分:1)
这取决于应用程序。
在99%的用例中,您拥有一个正常的,长期运行的应用程序。然后,您应该只使用elastic.NewClient
创建一个客户端。您可以在代码中传递它,它应该始终有效,即使在不同的goroutines中也是如此。这将创建一个长期运行的客户端,它有几个好处。例如。它将在后台运行健康检查,以防止Elastic向不健康或死亡的节点发送请求。
但是,如果您有一个短期运行的应用程序(类似AWS Lambda oder Cloud Functions),您可能需要一个"连接"在请求级别。在这种特定情况下,您可以使用elastic.NewSimpleClient
。虽然每次都在创建一个新客户端,但它有更多的开销。它不会做任何健康检查和其他事情。
请勿为每个请求创建一个elastic.NewClient
的新客户端,因为对NewClient
的任何调用都会创建一组goroutine,如果您这样做,您将很快耗尽资源。
请阅读documentation和wiki了解详情。