Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elasticsearch.NET故障切换不';似乎不排除死节点_.net_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch,nest,.net,elasticsearch,Nest" /> elasticsearch,nest,.net,elasticsearch,Nest" />

Elasticsearch.NET故障切换不';似乎不排除死节点

Elasticsearch.NET故障切换不';似乎不排除死节点,.net,elasticsearch,nest,.net,elasticsearch,Nest,我正在使用ElasticSearch.NET和NEST为对.NET Web服务的调用提供服务。ElasticClient是单例的,因此它的连接池和故障转移应该在服务调用之间保持 ElasticClient正在使用带有两个群集节点的SniffingConnectionPool。这两个节点中的一个已死亡,根本不响应http通信 我的理解是,SniffingConnectionPool应该检测到这一点,并从它使用的节点中排除死连接——也就是说,所有Elasticsearch流量都应该发送到唯一的活动节

我正在使用ElasticSearch.NET和NEST为对.NET Web服务的调用提供服务。ElasticClient是单例的,因此它的连接池和故障转移应该在服务调用之间保持

ElasticClient正在使用带有两个群集节点的SniffingConnectionPool。这两个节点中的一个已死亡,根本不响应http通信

我的理解是,SniffingConnectionPool应该检测到这一点,并从它使用的节点中排除死连接——也就是说,所有Elasticsearch流量都应该发送到唯一的活动节点

不幸的是,ElasticClient坚持尝试使用死节点,给webservice响应增加了很长的超时延迟。是否有人成功使用Elasticsearch.NET故障转移池?有没有人知道我做错了什么,或者我还能尝试什么

我已经尝试切换到StaticConnectionPool,但问题仍然存在

我已经尝试过对连接设置进行模糊处理,但无法从doco处获得足够有用的理解

下面是我用来创建客户端及其连接池的代码:

    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流量并将捕获的请求发送给我?我很想在这里查个水落石出。