背景:项目使用的是spring-boot,所以选择ES客户端的时候图简单,就用了spring-boot-starter-data-elasticsearch 版本为 2.1.2.RELEASE。
一切都按照美好在进行,开发编码,单元测试,本地联调都OK。
当我们把应用部署到腾讯云的时候,发现 ip:9300 端口连接不上,在腾讯云
控制台找了一圈也没找到tcp端口的相关设置。只有http的9200端口。
于是乎翻阅官方文档,如下图:
原文链接如下:
cloud.tencent.com/document/pr…
图中标红的箭头写明了,不推荐TransportClient。wtf,spring-boot-starter-data-elasticsearch就是使用的这种方式链接,居然不推荐。马上去官网找相关资料。如下图:
原文链接如下:
上图中最重要的信息就是:
TransportClient被弃用,取而代之的是Java High Level REST Client ,TransportClient将在Elasticsearch 8.0中被删除。
虽然腾讯云上面ES版本是6.4.3,但是我们还是要与时俱进。所以我将项目的ES 客户端从
spring-boot-starter-data-elasticsearch 换为了
compile 'org.elasticsearch.client:elasticsearch-rest-client:6.4.3'
compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.3'虽然换了客户端,但是它支持QueryBuilder,兼容之前TransportClient的代码,所以代码的改动量大大减少。demo如下。
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder builder = new SearchSourceBuilder();
searchSourceBuilder.query(xxxQuery);
searchRequest.source(builder);总结:
经过这个事情,我的收获如下。
1.不能光凭着以前的经验或者图简单就选择一个工具(特别是ES这种更新很快的框架,一定看清楚它目前的大方向和主流支持的工具)。
2.做事情之前提前做好预研,让风险和问题早暴露。
3.代码结构解耦真的很重要。否则发生这种改动的时候,你会很头大。
4.使用spring-boot-starter-xxx一时爽,但是不一定能一直爽。(spring-boot-starter-xxx虽然强大而且方便,但是他毕竟需要人来更新维护,对于像ES这样版本更新很快的框架,spring-boot-starter-xxx很难跟上更新的节奏)