elasticsearch构造client实现java客户端调用接口示例分析-亚博电竞手机版
目录
- client的继承关系
- 方法实现上
- 以index方法为例
- execute方法代码
- 总结:
elasticsearch通过构造一个client对外提供了一套丰富的java调用接口。总体来说client分为两类cluster信息方面的client及数据(index)方面的client。这两个大类由可以分为通用操作和admin操作两类。
client的继承关系
(1.5版本,其它版本可能不一样):
通过这个继承关系图可以很清楚的了解client的实现,及功能。总共有三类即client,indicesadminclient和clusteradminclient。它都有自己的实现类,但最后都是通过client接口对外提供服务。client作为对外的总接口,首先通过admin(www.cppcns.com)方法组合了admin的相关操作,它本身也提供了所有对数据和cluster的通用操作。
方法实现上
所有的接口都通过两种方式实现了异步调用,一个是返回一个actionfuture,另外一种方式是接受一个actionlistener。
以index方法为例
如下所示
actionfuture
in恰卡编程网dex(indexrequest request) ; void index(indexrequest request, actionlistener
listener);
第一个方法会返回一个future,第二个方法则需要传递一个listener。这也是异步实现的两个基本方式。client使用了门面模式,所有的实现都在abstractclient类中,还以index方法为例,代码如下所示:
@override public actionfuture
实现如上所示,之所以说它是门面模式是因为所有的方法都被集成到了client中,但是执行过程都是在对应的action中执行。在execute方法中,获取到相应的action实例,真正的逻辑是在对应的transportaction中实现。
execute方法代码
如下所示:
@suppresswarnings("unchecked") @override public
每一种操作都对应有相应的transportaction,这些transportaction才是最终的执行者。这里先以index为例简单说明,在后面索引功能分析中会看到更多这种的结果。
public class indexaction extends clientaction
在indexaction中只是简单的定义了一个name,及几个简单的方法。这个名字会在启动时作为对于的transporthandler的key注册到transportservice中。在execute方法中,会根据action的将transportaction取出如上一段代码所示。真正的执行逻辑在internaltransportclient中,这里先略过它的实现,后面会有详细分析。所有这些action的注册都是在actionmodule中实现,注册过程会在后面跟action一起分析。
总结:
client模块通过代理模式,将所有的操作都集成到client接口中。这样外部调用只需要初始化client就能够完成所有的调用功能。这些接口的执行lfuiz逻辑均在对应的transportaction中。这种精巧的设计给使用者带来很大的便利 。
以上就是elasticsearch构造client实现java客户端调用接口示例分析的详细内容,更多关于elasticsearch构造java客户端调用接口client的资料请关注亚博电竞手机版其它相关文章!