我正在使用 elasticsearch-js (NodeJS),只要 ElasticSearch 正在运行,一切都会正常运行。但是,在尝试调用客户端的一种方法之前,我想知道我的连接是否有效。我正在以一种同步的方式做事,但只是为了性能测试的目的(例如,检查我是否有一个空索引可以使用,摄取一些数据,查询数据)。看这样的片段:
var elasticClient = new elasticsearch.Client({
host: ((options.host || 'localhost') + ':' + (options.port || '9200'))
});
// Note, I already have promise handling implemented, omitting it for brevity though
var promise = elasticClient.indices.delete({index: "_all"});
/// ...
是否有某种机制可以发送客户端配置以快速失败,或者我可以在客户端上执行一些测试以确保它在调用 delete
之前打开?
更新:2015-05-22
我不确定这是否正确,但也许尝试获取客户统计信息是合理的?
var getStats = elasticClient.nodes.stats();
getStats.then(function(o){
console.log(o);
})
.catch(function(e){
console.log(e);
throw e;
});
通过 Node 调试,当 ElasticSearch 关闭/无法访问时,我看到 promise 被拒绝:“错误:无事件连接”
。当它确实连接时,我当时的处理程序中的 o
似乎有关于连接状态的详细信息。这种方法是否正确,或者是否有检查连接可行性的首选方法?
最佳答案
获取统计数据可能是一项繁重的任务,只是为了确保您的客户端已连接。您应该使用 ping,参见第二个示例 https://github.com/elastic/elasticsearch-js#examples
在启动时实例化 elasticsearch-js 客户端连接后,我们也在使用 ping。
// example from above link
var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
host: 'localhost:9200',
log: 'trace'
});
client.ping({
// ping usually has a 3000ms timeout
requestTimeout: Infinity,
// undocumented params are appended to the query string
hello: "elasticsearch!"
}, function (error) {
if (error) {
console.trace('elasticsearch cluster is down!');
} else {
console.log('All is well');
}
});
关于node.js - 如何检查 ElasticSearch 客户端是否已连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30403891/