Elasticsearch.NET故障切换不';似乎不排除死节点
我正在使用ElasticSearch.NET和NEST为对.NET Web服务的调用提供服务。ElasticClient是单例的,因此它的连接池和故障转移应该在服务调用之间保持 ElasticClient正在使用带有两个群集节点的SniffingConnectionPool。这两个节点中的一个已死亡,根本不响应http通信 我的理解是,SniffingConnectionPool应该检测到这一点,并从它使用的节点中排除死连接——也就是说,所有Elasticsearch流量都应该发送到唯一的活动节点 不幸的是,ElasticClient坚持尝试使用死节点,给webservice响应增加了很长的超时延迟。是否有人成功使用Elasticsearch.NET故障转移池?有没有人知道我做错了什么,或者我还能尝试什么 我已经尝试切换到StaticConnectionPool,但问题仍然存在 我已经尝试过对连接设置进行模糊处理,但无法从doco处获得足够有用的理解 下面是我用来创建客户端及其连接池的代码:Elasticsearch.NET故障切换不';似乎不排除死节点,.net,elasticsearch,nest,.net,elasticsearch,Nest,我正在使用ElasticSearch.NET和NEST为对.NET Web服务的调用提供服务。ElasticClient是单例的,因此它的连接池和故障转移应该在服务调用之间保持 ElasticClient正在使用带有两个群集节点的SniffingConnectionPool。这两个节点中的一个已死亡,根本不响应http通信 我的理解是,SniffingConnectionPool应该检测到这一点,并从它使用的节点中排除死连接——也就是说,所有Elasticsearch流量都应该发送到唯一的活动节
private static IElasticClient _MakeClient(string[] injectedUris, string defaultIndex)
{
var settings = new ConnectionSettings(_GetIConnectionPool(injectedUris), defaultIndex);
var connection = new ConnectionWithBackoffStrategy(
new HttpConnection(settings));
var client = new ElasticClient(settings, connection);
return client;
}
private static IConnectionPool _GetIConnectionPool(string[] injectedUris)
{
var uris = injectedUris ?? ConfigurationManager.AppSettings["elasticSearchUrls"].Split(',');
return new SniffingConnectionPool(uris.Select(uri => new Uri(uri)));
}
我正在使用Nest 1.0.0-beta1。
连接设置
具有选择连接嗅探的方法,例如嗅探连接故障(true)
和嗅探启动(true)
如果您选择这些,ElasticSearch.net将调用http://localhost:9200/_nodes/_all/clear?timeout=50
我相信这是为了证明节点是活动的,但是弹性搜索文档中没有关于clear
操作的信息
python实现似乎意味着它只是对一些将很快返回的东西的调用;虽然在对“所有节点”的请求中看到清除有点“可怕”
对嗅探请求使用小超时,应该是一个快速api调用
Yikes,这部分经过了大量测试,我还移植了真实世界的应用程序,并关闭了节点,以确认它能按预期工作。您是否能够捕获Fiddler流量并将捕获的请求发送给我?我很想在这里查个水落石出。