使用NEST ElasticSearch库进行连接池

我目前正在使用NEST 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的长时间。

回答:

您不必在TryConnect()每次致电Elasticsearch时都打电话。基本上,这是应用程序启动时的完整性检查调用。

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

查看实际实施:https :

//github.com/elastic/elasticsearch-

net/blob/master/src/Elasticsearch.Net/Connection/HttpConnection.cs

重用ElasticClient不会带来任何性能提升,因为每个调用已经有自己的调用 HttpWebRequest。整个客户端是无意构建的。

但是,我对为什么通话需要1秒钟非常感兴趣。您能否发布实际的NEST代码,如何测量呼叫并描述数据。

免责声明:我是NEST的作者。

以上是 使用NEST ElasticSearch库进行连接池 的全部内容, 来源链接: utcz.com/qa/423238.html

回到顶部