对于源码分析,我们先还是从最外层域用户交互这一块开始,看到源码里面有一个client(客户端)的包:
点开查看详细类文件结构:
首先我们可以看到AdminClient接口,里面提供两个方法:
1) cluster(),产生一个允许从集群中执行action或操作的client;
2) indices(),产生一个允许从索引中执行action或操作的client。
查看树结构关联:
可以看出,AdminClient接口有两个实现类,分别为org.elasticsearch.client.AdminClient.NodeAdminClient和org.elasticsearch.client.transport.support.InternalTransportAdminClient。
NodeAdminClient有一个带有@Inject注解的构造器,并实现了接口AdminClient的两个方法。@Inject导致了一个直接的后果:你只能通过被@Inject标注的构造器生成实例。indices()和cluster()覆盖了AdminClient的同名方法,分别返回NodeIndicesAdminClient和NodeClusterAdminClient对象。
NodeAdminClient会继承父类org.elasticsearch.common.component.AbstractComponent的nodeName()方法用以获取当前节点的名称。
org.elasticsearch.client.transport.support.InternalTransportAdminClient类
InternalTransportAdminClient其实与NodeAdminClient类似,只是它的indices()和cluster()分别返回的是InternalTransportIndicesAdminClient和InternalTransportClusterAdminClient。
NodeAdminClient和InternalTransportAdminClient均没有子类,所以只有当我们需要用到NodeIndicesAdminClient、NodeClusterAdminClient、InternalTransportIndicesAdminClient或InternalTransportClusterAdminClient时,才考虑创建这两个类的实体。
此外,org.elasticsearch.client.Client接口为从集群中执行action或operation提供了一站式接口,这里的所有操作都是自然而然地异步执行的,每个action或operation都有两种风格,一种是简单地返回一个org.elasticsearch.action.ActionFuture,另一种是访问一个org.elasticsearch.action.ActionListener。你可以在org.elasticsearch.node.Node启动时取得一个Client,也可以使用org.elasticsearch.client.transport.TransportClient远程连接一个或多个节点。
程序猿行业技术生活交流群:181287753(指尖天下),欢迎大伙加入交流学习。