ElasticSearch.NET连接/客户端管理生命周期

时间:2014-06-13 17:10:12

标签: .net elasticsearch object-lifetime

当我使用ElasticSearch.NET建立与ElasticSearch集群的连接时,我使用的代码块如下:

var uris = settingsProvider.ElasticSearchUri.Split(';').Select(x => new Uri(x));
var sniffingConnectionPool = new SniffingConnectionPool(uris);
var connectionConfiguration =
    new ConnectionConfiguration(sniffingConnectionPool)
        .SniffOnConnectionFault()
        .SniffOnStartup();
var client = new ElasticsearchClient(settings: connectionConfiguration);

建议我为ElasticsearchClientConnectionConfigurationSniffingConnectionPool记忆/制作静态/制作单身包装,以便他们不必为每次搜索时重建?

3 个答案:

答案 0 :(得分:0)

我没有在文档中看到任何其他建议,但一般情况下我会谨慎行事并避免使用单例,因为文档也没有对线程安全做出任何承诺。请务必处置任何IDisposable,如果您担心性能或内存使用情况,请使用分析器确定您的工作目标。

答案 1 :(得分:0)

我们注意到,对于5节点群集中的搜索,使用Sniffing需要800毫秒到1.2秒之间的时间。我们以为我们会做一个单身人士,所以我们只会嗅一次。然后设置.SniffOnConnectionFault(true)然后如果它嗅探的节点消失,如果我理解正确的话,它会选择另一个节点。

有没有人使用这种模式并且有更好的方法,因为嗅探太慢了?

答案 2 :(得分:0)

这是一篇旧帖子,但此信息可能对某人有所帮助。 Elasticsearch文档说:

  

一般情况下,我们建议人们注册他们的ElasticClient实例   作为单身人士。客户端是线程安全的,因此共享一个实例   线程之间很好。

https://www.elastic.co/guide/en/elasticsearch/client/net-api/2.x/lifetimes.html