巢ElasticSearch库连接池(Connection Pooling with NEST El

2019-09-19 02:57发布

我目前使用巢ElasticSearch C#库与ElasticSearch交互。 我的项目是一个MVC 4的WebAPI项目,基本上建立了访问目录服务信息的RESTful Web服务。

我们才刚刚开始与NEST工作,并已被绊倒缺少文档。 那里的东西是有用的,但它有一些非常大的洞。 目前,一切都需要我们的作品,但是,我们正在运行到一个问题与连接有时需要长达一整秒。 我们想要做的是使用某种形式的连接池,类似于你如何与SQL Server进行交互。

下面是有关如何使用嵌套连接的文档: http://mpdreamz.github.com/NEST/concepts/connecting.html

下面是我们的项目相关的代码片段:

public class EOCategoryProvider : IProvider
{
    public DNList ExecuteQuery(Query query)
    {
        //Configure the elastic client and it's settings
        ConnectionSettings elasticSettings = new ConnectionSettings(Config.server, Config.port).SetDefaultIndex(Config.index);
        ElasticClient client = new ElasticClient(elasticSettings);

        //Connect to Elastic
        ConnectionStatus connectionStatus;
        if (client.TryConnect(out connectionStatus))
        {
            // Elastic Search Code here ...
        } // end if
    } // end ExecuteQuery
} // end EOCategoryProvider

从看文档,我不能看到一个连接池的任何规定。 我一直在考虑实施我自己(有,说储存3个或4 ElasticClient对象,并选择他们循环赛风格),但我想知道如果任何人有一个更好的解决方案。 如果没有,没有任何人有关于执行手工连接池的最佳方法建议? 任何文章指向?

感谢什么你们拿出。

更新 :这似乎已涉及到调用TryConnect在每次请求,和特定的网络设置。 相同的网络弹性盒上使用机器时的问题完全消失; 我的开发机器(平均为350毫秒的弹性盒)似乎无法进行HTTP连接有时,这引起了长时间的TryConnect。

Answer 1:

你不必调用TryConnect()每次你做一个Elasticsearch通话时间。 这基本上是一个全面的检查调用应用程序启动时。

NEST是C#REST客户端Elasticsearch和默认IConnection使用WebRequest.Create这已经池中的TCP连接。

查看实际执行: https://github.com/elastic/elasticsearch-net/blob/master/src/Elasticsearch.Net/Connection/HttpConnection.cs

重用ElasticClient不会提供任何的性能提升,因为每次调用已经都有自己HttpWebRequest 。 整个客户端是建立在目的无状态的。

不过,我在为什么呼叫正在1秒钟你很感兴趣。 你能后的实际NEST代码,你是如何测量的调用和描述你的数据。

免责声明:我NEST的作者。



文章来源: Connection Pooling with NEST ElasticSearch Library