elasticsearch java客户端action怎么实现

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

这里展示的是Action包的部分截图,其中包含了各种不同功能对应的Action。各个action的包也都非常类似于index。这些action都是从基础的action继承而来,因此它们的实现非常相似。下图展示了indexaction的继承关系

这些action只是一个代替品,没有实现真正的功能,因此它们在实现上也非常容易。他们的主要功能是提供创建新的响应和请求的方法,并对应到相应的操作名称。还拿indexaction为例,它的方法图如下所示:

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

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

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

TransportAction transportAction = actions.get((ClientAction)action)它的作用就是根据action获取TransportAction。因为action只是代理。The implementation of these associations is carried out in the ActionModule, as demonstrated in the following code:

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实例,最终请求在它们下面处理。

以上就是elasticsearch java客户端action怎么实现的详细内容,更多请关注www.sxiaw.com其它相关文章!