ElasticSearch 应用开发(九)Transport Client和Rest Client网络协议的对比

淺唱寂寞╮ 提交于 2019-12-25 13:13:25

TCP Http 协议的对比


(1)TransportClient:java客户端的方式是以TCP协议在9300端口上进行通信:

TransportClient、NodeClient(2.3版本弃用);

java transportClient api提供了Query Builder来协助构建查询对象;

基于java api封装的orm框架,封装比较死板,不太灵活,兼容性差,不能像调用restful那样直接操作query dsl,所以也不能直接针对query dsl,在head插件或者kibana里面调试和调优query dsl,写出了query dsl还要想方设法转换成对应的java api的调用方式。

(2)RestClient:http客户端的方式是以http协议在9200端口上进行通信:

http则需要自己在代码里拼JSON DSL;

基于restful的,直接操作各种restful api和query dsl,比较简单,没有orm功能;

(3)使用对比

从程序员角度来说, java transport api更显得更加友好,并且性能也要比http稍好。但java transport api也有如下弊病:
1. 第三方依赖包比较多,如果应用还要集成其他一些框架和组件,容易产生依赖冲突,解决起来比较麻烦。 
2. client版本必须和ES服务端版本一致,否则容易产生兼容性问题。 
3. clientJAVA版本也需要和Server端保持一致,否则也可能产生兼容性问题。
4. client端的环境和版本需要和server端保持一致这个要求,使得client/server端运行环境强耦合,导致ES Server端很难独立升级。

(4)网络

TransportClient基于TCP协议、Rest Client 基于Http协议;

从计算机网络方面看TCP协议在传输层、Http协议在应用层;

(5)线程池

不管是transport client还是rest client都是线程安全的,都应该使用单例。

线程池完全够用,不会是性能瓶颈所在。

参考:

https://elasticsearch.cn/question/2273

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!