【问题标题】:ElasticSearch.NET connection/client management lifecycleElasticSearch.NET 连接/客户端管理生命周期
【发布时间】:2014-06-13 17:10:12
【问题描述】:

当我使用 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 记忆/制作静态/制作单例包装器,以便不必在每次搜索时重新构建它们?

【问题讨论】:

    标签: .net elasticsearch object-lifetime


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我们注意到,当使用嗅探时,在 5 节点集群中进行搜索需要 800 毫秒到 1.2 秒的时间。我们认为我们会做一个单例,以便我们只嗅一次。并设置 .SniffOnConnectionFault(true) 然后如果它嗅探的节点消失了,如果我理解正确,它将选择另一个。

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

      【讨论】:

      • 仅在第一个请求时为 800 毫秒,还是在多个请求中始终为 800 毫秒?我读过有人提到客户端需要为第一个请求预热,这需要更多时间。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-31
        • 2015-02-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-24
        相关资源
        最近更新 更多