目录
client的继承关系方法实现上以index方法为例execute方法代码总结:elasticsearch通过构造一个client对外提供了一套丰富的java调用接口。总体来说client分为两类cluster信息方面的client及数据(index)方面的client。这两个大类由可以分为通用操作和admin操作两类。
client的继承关系
(1.5版本,其它版本可能不一样):
通过这个继承关系图可以很清楚的了解client的实现,及功能。总共有三类即client,indicesAdminClient和ClusterAdminClient。它都有自己的实现类,但最后都是通过client接口对外提供服务。client作为对外的总接口,首先通过admin()方法组合了admin的相关操作,它本身也提供了所有对数据和cluster的通用操作。
方法实现上
所有的接口都通过两种方式实现了异步调用,一个是返回一个ActionFuture,另外一种方式是接受一个ActionListener。
以index方法为例
如下所示
ActionFuture
index(IndexRequest request) ; void index(IndexRequest request, ActionListener
listener);
第一个方法会返回一个future,第二个方法则需要传递一个Listener。这也是异步实现的两个基本方式。client使用了门面模式,所有的实现都在AbstractClient类中,还以index方法为例,代码如下所示:
@Override public ActionFutureindex(final IndexRequest request) { return execute(IndexAction.INSTANCE, request); } @Override public void index(final IndexRequest request, final ActionListener listener) { execute(IndexAction.INSTANCE, request, listener); }
实现如上所示,之所以说它是门面模式是因为所有的方法都被集成到了client中,但是执行过程都是在对应的action中执行。在execute方法中,获取到相应的action实例,真正的逻辑是在对应的transportaction中实现。
execute方法代码
如下所示:
@SuppressWarnings("unchecked") @Override public> ActionFuture execute(Action action, Request request) { headers.applyTo(request); TransportAction transportAction = actions.get((ClientAction)action); return transportAction.execute(request); } @SuppressWarnings("unchecked") @Override public > void execute(Action action, Request request, ActionListener listener) { headers.applyTo(request); TransportAction transportAction = actions.get((ClientAction)action); transportAction.execute(request, listener); }
每一种操作都对应有相应的transportAction,这些transportAction才是最终的执行者。这里先以index为例简单说明,在后面索引功能分析中会看到更多这种的结果。
public class IndexAction extends ClientAction{ public static final IndexAction INSTANCE = new IndexAction(); public static final String NAME = "indices:data/write/index"; private IndexAction() { super(NAME); } @Override public IndexResponse newResponse() { return new IndexResponse(); } @Override public IndexRequestBuilder newRequestBuilder(Client client) { return new IndexRequestBuilder(client); } }
在IndexAction中只是简单的定义了一个NAME,及几个简单的方法。这个名字会在启动时作为对于的transportHandler的key注册到TransportService中。在execute方法中,会根据action的将transportAction取出如上一段代码所示。真正的执行逻辑在InternalTransportClient中,这里先略过它的实现,后面会有详细分析。所有这些action的注册都是在actionModule中实现,注册过程会在后面跟action一起分析。
总结:
client模块通过代理模式,将所有的操作都集成到client接口中。这样外部调用只需要初始化client就能够完成所有的调用功能。这些接口的执行逻辑均在对应的transportAction中。这种精巧的设计给使用者带来很大的便利 。
以上就是elasticsearch构造Client实现java客户端调用接口示例分析的详细内容,更多关于elasticsearch构造java客户端调用接口Client的资料请关注脚本之家其它相关文章!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?