龙空技术网

ES处理请求的流程

沪漂程序员阿龙 575

前言:

眼前小伙伴们对“http请求es”大致比较关切,兄弟们都需要分析一些“http请求es”的相关资讯。那么小编同时在网上搜集了一些有关“http请求es””的相关内容,希望朋友们能喜欢,姐妹们一起来了解一下吧!

一、ActionModule是如何构建模块的

我们需要从ActionModule的构建里面看看是如何组合模块的,从而分析如何进行请求处理的;

1、如何将http请求处理Action进行注册的

其实我们发现ActionModule继续构建了之后直接获取出了一个RestController,我们猜测其实就是RestController来进行我们请求的分发处理的;

这里面有一个方法比较重要:initRestHandlers,用来初始化Rest请求如何处理及转发;

我们就拿创建索引来举例

我们可以看到,RestCreateIndexAction通过传递进来的RestController进行注册,将自己注册到RestController上面去,创建索引比较特殊,只有一个路径,我们可以通过其他的Action发现,这个路径一个Action是可以注册多个到RestController上面的;

这里他其实会通过路径和方法请求类型去映射一个RestHandler处理逻辑(此处很重要,后面的请求分发就会通过这个来处理)

ActionModule构建好之后相应的Action注册好之后通过getRestController获取RestController,在构建NetworkModule将RestController放进去让其持有RestController的引用;

在构建的时候会将RestController交给getHttpTransports方法获取一个Netty4HttpServerTransport实例,这个实例

这个实例则是具体引用RestController的类

这个类还有一个doStart方法,这里面是对Netty做一些配置处理,里面有一个configureServerChannelHandler方法,这个里面构建了http请求的处理逻辑;

我们可以看到这里并且将自己的引用交给了HttpChannelHandler,这样的话HttpChannelHandler就可以通过Netty4HttpServerTransport里面的RestController进行请求分发了

这里面实际构建了一个Netty4HttpRequestHandler,我们可以猜测一下,后面ES的http请求基本都是依靠这个类来进行处理的;

initChannel方法则是用来初始化对请求处理的一个链路;最后交给Netty4HttpRequestHandler来进行请求分发;

我们上面讲过,这个类里面是持有Netty4HttpServerTransport的引用,这个里面有一个比较关键的类RestController,RestController里面注册了相应的路径对应的处理逻辑;

我们看到dispatchRequest分发try里面就一行代码,我就点进去看一下

这一行代码回通过请求路径获取到所有与路径对应的所有Handler

在遍历所有的Handler通过方法的请求类型去获取具体的RestHandler进行处理

这里就会获取到具体的RestHandler,我们这里的话就会获取到RestCreateIndexAction,在通过wrappedHandler.handleRequest(request, responseChannel, client)进行处理;

所有的Action都会继承BaseRestHandler

这里里面有一个公共的方法handleRequest;因此上图获取到一个RestHandler就会调用其handleRequest来处理请求;

2、下图是实际的请求处理类

上面请求转发的Action实际都会到这里来,实际处理的Action是以Transport打头,本文了解即可,后面会进行分析

ActionModule在构建的时候有一个setupActions方法比较关键

我们发现这个方法里面会注册很多Action

我们就拿创建index的Action举例

注册方法里面的第一个入参是下图的类

我们点进去看一下,我们会发现这里他就是将刚刚的name路径为key进行注册的

我们看到这里就知道,这个注册表其实就是一个map

这里的话会将我们注册好的注册表map打包成一个不可编辑的map进行返回

这样的话ActionModule就持有了一个所有Action的一个map,这样我们就可以根据name找到相应的Action进行逻辑处理了

标签: #http请求es