[源码解析] elastic search 的查询原理

当用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的内容是不相同的。

猜你喜欢

转载自blog.csdn.net/weixin_39394909/article/details/108437852
今日推荐