当前位置: 首页 > 面试题库 >

使用NEST ElasticSearch库进行连接池

龙毅
2023-03-14
问题内容

我目前正在使用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的作者。



 类似资料:
  • 我第一次使用带有IISExpress的新Visual Studio 2013(以前 ASP.net VS2010上的开发服务器使用)。我在尝试调试项目时遇到问题。 这是我在Chrome看到的: 无法与服务器建立安全连接。这可能是服务器的问题,也可能需要您没有的客户端身份验证证书。错误代码:ERR_SSL_PROTOCOL_ERROR 我更新了我的计划—— 与localhost的连接中断。错误代码:

  • 问题内容: 只是从github交叉发布。 我将xorm 0.4.3与go-mysql一起使用。我们使用Golang 1.4。 我们在和中指定了以下内容: 而且我们使用相同的单个实例来查询Mysql。 但是我们仍然看到很多连接的状态,这是远远超过这些数字我已经配置和 我们国家的时候- 我们还观察到,即使我们停止MySQL,连接号仍保持固定但处于状态。如果我们关闭应用程序,则所有连接都会消失。 但是在

  • 问题内容: 我在使用时遇到了麻烦,因为我之前从未见过它,也不知道我在用它做什么。 基本上,我正在关闭部队,因为我试图在主类上运行连接。有人可以帮我添加代码吗: 问题答案: 只是一个简单的例子,它看起来像:

  • 求你了,我需要你的帮助。 我正在使用TCP连接在java服务器和android应用程序客户端之间建立TCP连接。假设我将发送一个序列化对象,但是每次在客户端,代码都会在中的Obj=(Person)处被阻塞。readObject;其中in是数据对象InputStream,Person是序列化对象。 然而,如果我发送的是字符串或整数,并且我使用Obj=in,代码就可以工作。readObject;直接地

  • 问题内容: 我有两个实体:和。我正在使用Hibernate 3.6。 如何使用hibernate标准实现这一目标,最重要的是,我必须将其用于分页。 而“我的道”如下所示以显示jqgrid中的“问题”列表 公共列表showHelpDeskIssues(DetachedCriteria dc,int from,int size){ 问题答案: 您可以尝试以下 这里parent是中的属性名称,child

  • 问题内容: 我正在尝试使用android应用中的JDBC连接到SQL Server。我将sqljdbc4.jar导入到我的应用程序中,但是当我进入 conn = DriverManager.getConnection(connString); 我得到以下错误:连接字符串是 jdbc:sqlserver://xxx.xxx.xxx.xxx:1433; encrypt = fasle; user =