elasticsearch java客户端action的实现简单分析

作者:zziawan 时间:2022-04-25 05:39:45 

上一篇介绍了elasticsearch的client结构,client只是一个门面,在每个方法后面都有一个action来承接相应的功能。但是action也并非是真正的功能实现者,它只是一个代理,它的真正实现者是transportAction.本篇就对action及transportAction的实现做一个简单的分析,

elasticsearch中的绝大部分操作都是通过相应的action,这些action在action包中。它的结构如下图所示:

elasticsearch java客户端action的实现简单分析

上图是action包的部分截图,这里面对应着各个功能的action。各个action的包也都非常类似于index。这些action的实现也非常类似,都是基础自action,下图是indexaction的继承关系:

elasticsearch java客户端action的实现简单分析

因为这些action并未真正实现相应的功能,只是一个代理,因此实现上也非常简单。他们的主要作用是提供新建response和request的方法及对应的action名称。还拿indexaction为例,它的方法图如下所示:

elasticsearch java客户端action的实现简单分析

可以看到它只是提供了两个新建response和request的方法,及一个字NAME字段,这个NAME字段会用于后面action调用中。每个action对应的功能实现是在对应的transportAction中。

elasticsearch java客户端action的实现简单分析

这些tansportAction都继承了TransportAction接口。客户端调用client的相关接口时,client会将请求发送到transportAction的execute上。每个功能的TransportAction实现了doExecute方法,功能的逻辑都在此方法中实现,这里先暂且不提,后面的功能分析中会看到对应的实现。

在client分析中有这样一段代码:

TransportAction<Request, Response> transportAction = actions.get((ClientAction)action)它的作用就是根据action获取TransportAction。因为action只是代理。这些关联关系是在ActionModule中实现的,代码如下所示:

registerAction(NodesInfoAction.INSTANCE, TransportNodesInfoAction.class);
       registerAction(NodesStatsAction.INSTANCE, TransportNodesStatsAction.class);
       registerAction(NodesShutdownAction.INSTANCE, TransportNodesShutdownAction.class);
       registerAction(NodesRestartAction.INSTANCE, TransportNodesRestartAction.class);
       registerAction(NodesHotThreadsAction.INSTANCE, TransportNodesHotThreadsAction.class);
       registerAction(ClusterStatsAction.INSTANCE, TransportClusterStatsAction.class);
       registerAction(ClusterStateAction.INSTANCE, TransportClusterStateAction.class);
       registerAction(ClusterHealthAction.INSTANCE, TransportClusterHealthAction.class)

这只是一小部分,可以看到在module中会将对应的action和TransportAction绑定。这样在client需要收到请求时会根据对于的action实例来查找对应的tansportAction实例,最终请求在它们下面处理。

总结:这里对action及TransportAction做了简单分析。作为elasticsearch对外的java客户端的一部分,action作用是在客户端相应的方法中接收相应的请求,然后转发到对应的TransportAction中进行处理。这里使用了代理模式,通过guice注入解耦。

来源:https://www.cnblogs.com/zziawanblog/p/6637648.html

标签:elasticsearch,java,action
0
投稿

猜你喜欢

  • 详解Java的回调机制

    2023-07-27 07:17:43
  • Spring整合Quartz开发代码实例

    2022-03-12 16:37:26
  • Java接口默认方法带来的问题分析【二义性问题】

    2023-11-27 20:32:55
  • C# 参数按照ASCII码从小到大排序(字典序)

    2023-03-14 22:14:11
  • @Value如何获取yml和properties配置参数

    2021-12-12 13:24:01
  • java中Hashmap的get方法使用

    2023-10-29 13:10:05
  • Java @Async注解导致spring启动失败解决方案详解

    2022-03-06 00:15:17
  • java简单坦克大战制作代码

    2023-02-07 05:08:37
  • 通过实例深入了解java序列化

    2022-12-01 17:37:39
  • 简单谈谈Java中的栈和堆

    2022-07-30 05:33:01
  • 用C#实现启动另一程序的方法实例

    2023-06-20 12:05:43
  • Java经典排序算法之插入排序

    2022-08-29 11:08:39
  • Spring Boot 整合 Apache Dubbo的示例代码

    2021-10-09 03:52:07
  • linux(center OS7)安装JDK、tomcat、mysql 搭建java web项目运行环境

    2022-07-04 07:02:37
  • Java实现删除排序数组中重复元素的方法小结【三种方法比较】

    2023-09-28 15:21:48
  • maven打包如何指定jdk的版本

    2022-12-21 20:59:20
  • 浅谈springboot之JoinPoint的getSignature方法

    2022-12-25 11:23:20
  • Java Object类中的常用API介绍

    2023-11-09 01:51:00
  • 浅谈JVM垃圾回收之哪些对象可以被回收

    2021-08-14 18:57:47
  • 一篇带你解析入门LongAdder源码

    2023-11-28 20:17:52
  • asp之家 软件编程 m.aspxhome.com