elasticsearch java客户端action的实现简单分析-mile米乐体育
上一篇介绍了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
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.intkshtlftristance, transportclusterstatsactiontkshtlftri.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实现的资料请关注mile米乐体育其它相关文章!