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 index(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就能够完成所有的调用功能。这些接口的执行lfuiz逻辑均在对应的transportaction中。这种精巧的设计给使用者带来很大的便利 。

以上就是elasticsearch构造client实现java客户端调用接口示例分析的详细内容,更多关于elasticsearch构造java客户端调用接口client的资料请关注亚博电竞手机版其它相关文章!

展开全文
内容来源于互联网和用户投稿,文章中一旦含有亚博电竞手机版的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系亚博电竞手机版删除

最新文章

网站地图