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. client端JAVA版本也需要和Server端保持一致,否则也可能产生兼容性问题。
4. client端的环境和版本需要和server端保持一致这个要求,使得client/server端运行环境强耦合,导致ES Server端很难独立升级。
(4)网络
TransportClient基于TCP协议、Rest Client 基于Http协议;
从计算机网络方面看TCP协议在传输层、Http协议在应用层;
(5)线程池
不管是transport client还是rest client都是线程安全的,都应该使用单例。
线程池完全够用,不会是性能瓶颈所在。
参考:
来源:CSDN
作者:腊-八-粥
链接:https://blog.csdn.net/HuoqilinHeiqiji/article/details/89713412