Javascript 从节点请求Elasticsearch超时
我正在使用官方Javascript客户端设置一个简单的Node.js REST服务与Elasticsearch接口。我在本地运行此代码,但群集位于远程。当我浏览浏览器时,使用Javascript 从节点请求Elasticsearch超时,javascript,node.js,elasticsearch,request-timed-out,Javascript,Node.js,elasticsearch,Request Timed Out,我正在使用官方Javascript客户端设置一个简单的Node.js REST服务与Elasticsearch接口。我在本地运行此代码,但群集位于远程。当我浏览浏览器时,使用\u head插件,我可以毫无问题地连接ES和查询。但是,通过Javascript客户端执行此操作会超时所有请求。我设置了ElasticSearch对象,但是向它发送任何请求都不起作用。我不认为这是网络问题,因为我可以通过浏览器访问ES。这就是我请求的方式,一个非常基本的get: var elasticsearch = re
\u head
插件,我可以毫无问题地连接ES和查询。但是,通过Javascript客户端执行此操作会超时所有请求。我设置了ElasticSearch对象,但是向它发送任何请求都不起作用。我不认为这是网络问题,因为我可以通过浏览器访问ES。这就是我请求的方式,一个非常基本的get:
var elasticsearch = require("elasticsearch");
var es = new elasticsearch.Client({
host: "https://my-address:9200/", // also tried without protocol part and trailing slashes
log: "error",
sniffOnStart: true
});
es.get({
index: "things",
type: "someThing",
id: "42"
}).then(doSomeStuff, handleStuffFailed);
此操作失败,出现一条简单的错误消息error:30000ms后请求超时。
我是不是遗漏了什么?我已经阅读了客户文档,这似乎是客户的基本“hello world”。我们在QBox上也遇到了这个问题,因为sniffOnStart。 尝试使用此配置:
var es = new elasticsearch.Client({
host: "my-address:9200",
log: "trace",
sniffOnStart: true
});
您将看到添加的节点ip是专用ip。
在我们这边,我们决定禁用嗅探并手动添加公共节点主机地址数组,如下所示:
var es = new elasticsearch.Client({
hosts: ["my-address1:9200", "my-address2:9200", "my-address3:9200"],
log: "error"
});
在实例化ES客户端时,尝试扩展requestTimeout参数
client = new elasticsearch.Client({
host : 'http://localhost:9200',
requestTimeout: 60000
});
我有一个长时间运行的过程,只花了不到10分钟。通过将requestTimeout值设为60000(10分钟),进程可以在不超时的情况下完成。检查此处有关此问题的信息:
我想我们需要使用上面提到的
requestTimeout
变量。关于弹性搜索中的超时,您需要区分两种类型的超时:
- 初始化超时:初始化ES时:
,requestTimeout
,两者都默认为30000ms。阅读更多:pingTimeout
- 基于操作的超时:许多操作,如
,批量
,创建
,删除
也可以设置索引
。假设您要插入一个大容量对象,您可以设置基于操作的超时:超时
您应该知道,基于操作的超时会覆盖初始化
RequestTimeout
如果您看到
发现:30000ms后请求超时
同样来自LB
要验证这不是网络问题,能否尝试从运行Node.js的同一台机器上运行curl命令?e、 g.curl-XGET''@superalanalysis现在就这么做了,连接得很好。顺便问一下,ES版本是0.90.5。您是否尝试使用http。。我在您的代码中看到https。。请查收again@Sidharthan
//在没有协议部分和尾部斜杠的情况下也进行了尝试
,并尝试了正常HTTP,但也出现了错误。有人提出这个问题后发现了解决方案吗@Slowarrytried,它只是在60000毫秒而不是30000毫秒时超时。ElasticSearch根本不应该超时。它是一个非常小的索引(5个文档,每个文档有一个短字符串字段)上的get by ID。即使在千兆字节的数据上也不会花那么长时间。60_000 ms=1分钟,不是10分钟。谢谢你,你刚刚救了我的命!(弹性云版本6.2也存在此问题)您的第二个链接已过期。基于此问题,我认为您也应该在基于操作的超时中使用requestTimeout而不是timeout。另外,使用timeout将返回503。