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

 更新时间:2022年04月21日 17:00:02   作者:zziawan  
这篇文章主要为大家介绍了elasticsearch java客户端action的实现简单分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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

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

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

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

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

这些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注入解耦。

以上就是elasticsearch java客户端action的实现简单分析的详细内容,更多关于elasticsearch java客户端action实现的资料请关注脚本之家其它相关文章!

相关文章

  • Spring Boot中配置定时任务、线程池与多线程池执行的方法

    Spring Boot中配置定时任务、线程池与多线程池执行的方法

    这篇文章主要给大家介绍了关于Spring Boot中配置定时任务、线程池与多线程池执行的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Java简单实现定时器

    Java简单实现定时器

    这篇文章主要为大家详细介绍了Java简单实现定时器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • Netty源码分析NioEventLoop线程的启动

    Netty源码分析NioEventLoop线程的启动

    这篇文章主要为大家介绍了Netty源码分析NioEventLoop线程的启动示例,有需要的朋友,可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • spring boot自带的page分页问题

    spring boot自带的page分页问题

    这篇文章主要介绍了spring boot自带的page分页问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringBoot实现定时任务动态管理示例

    SpringBoot实现定时任务动态管理示例

    这篇文章主要为大家介绍了SpringBoot实现定时任务动态管理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 解决SpringMVC使用@RequestBody注解报400错误的问题

    解决SpringMVC使用@RequestBody注解报400错误的问题

    这篇文章主要介绍了解决SpringMVC使用@RequestBody注解报400错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java编程使用箱式布局管理器示例【基于swing组件】

    Java编程使用箱式布局管理器示例【基于swing组件】

    这篇文章主要介绍了Java编程使用箱式布局管理器,结合实例形式分析了基于swing组件的箱式布局管理器定义与使用技巧,需要的朋友可以参考下
    2018-01-01
  • SpringCloud OpenFeign基本介绍与实现示例

    SpringCloud OpenFeign基本介绍与实现示例

    OpenFeign源于Netflix的Feign,是http通信的客户端。屏蔽了网络通信的细节,直接面向接口的方式开发,让开发者感知不到网络通信细节。所有远程调用,都像调用本地方法一样完成
    2023-02-02
  • 基于Eclipce配置Spring Boot过程图解

    基于Eclipce配置Spring Boot过程图解

    这篇文章主要介绍了基于Eclipce配置Spring Boot过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 详解Java环境变量配置方法(Windows)

    详解Java环境变量配置方法(Windows)

    这篇文章主要介绍了Java环境变量配置方法(Windows),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论