当我使用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);
建议我为ElasticsearchClient
,ConnectionConfiguration
或SniffingConnectionPool
记忆/制作静态/制作单身包装,以便他们不必为每次搜索时重建?
答案 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