当用Chrome浏览器插件elastic header连接es服务器的时候,调用的api是
GET /_nodes
es服务器内部使用的handler是Netty4HttpRequestHandler
看一下核心的堆栈信息图
对于该API,es内置对应的操作是
NodesInfoAction.INSTANCE
对于Admin有2个变量。如下所示
private final ClusterAdmin clusterAdmin;
private final IndicesAdmin indicesAdmin;
对于集群的请求使用的就是ClusterAdmin
对request进行执行,并不是直接执行
@Override
public <Request extends ActionRequest, Response extends ActionResponse>
void doExecute(ActionType<Response> action, Request request, ActionListener<Response> listener) {
// Discard the task because the Client interface doesn't use it.
executeLocally(action, request, listener);
}
真实的情况其实是异步执行
public < Request extends ActionRequest,
Response extends ActionResponse
> Task executeLocally(ActionType<Response> action, Request request, ActionListener<Response> listener) {
return taskManager.registerAndExecute("transport", transportAction(action), request,
(t, r) -> listener.onResponse(r), (t, e) -> listener.onFailure(e));
}
对于当前request返回一个task,等有了结果通过listener的方式通知请求方来获取数据
task模块比较独立,不与其他操作耦合,
把task放到内存里就返回了。
定时监控的task分2类,一个是当前节点node层面的统计信息,因为要做统计展示,另外一个会统计索引层面的统计信息,action的内容是不相同的。