elasticsearch-js的坑爹问题

作者描述 https://github.com/elasticsearch/elasticsearch-js/issues/33

 

自已封装的定时任务框架https://github.com/cclient/typescriptjob,长期以来稳定运行。

 

这次线上部署,每个单独任务功能项执行成功,单元测试通过。

 

但当整个集成服务部署执行时,部分定时任务,第一次调用成功,再下一次触发时直接失败,没 catch 到任何异常

 

仔细排查,定位定位到了抛异常的地方,万万没想到是getESConnection 这个方法报错

 

const elasticsearch = require("elasticsearch");

function getESConnection(conf) {
 let client = new elasticsearch.Client(conf);
 return client;
}
exports.getESConnection = getESConnection;


error Error: Do not reuse objects to configure the elasticsearch Client class: https://github.com/elasticsearch/elasticsearch-js/issues/33

new elasticsearch.Client(conf);

第一执行时成功,第二次调用,因为传入同样的 conf,Client内部会比对,第二次的 conf和第一次相同,就直接异常了???简直滑稽

 

作者的意思是,相同的配置构造的是相同的 Client 对象,是原始项的冗余拷贝,是反模式,就直接弹错误。

 

有人建议作者在构造时Client 时,检查conf,碰到同样的配置,内部返回单例,而不是报个错

 

优化层面的东西,本来就是仁者见仁,智者见智,弹个warn就够了,至于直接抛异常么,太不友好


https://github.com/elastic/elasticsearch-js/issues/33

 

es的文档后来也补充

 

https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/configuration.html

 

还是觉得这种设计太反人类了,相同的 conf 配置,至少不会有什么副作用,最多弹个 warn。但用别人的东西,只能迁就他

 

posted @ 2017-12-06 14:05  cclient  阅读(1242)  评论(0编辑  收藏  举报