Solr 调试环境快速搭建以及路由过程分析
0 条评论调试环境搭建
下载源码
去官网直接下载源码
https://solr.apache.org/downloads.html
搭建调试环境
去https://hub.docker.com/ 找到sorl镜像
下载docker 最新镜像
docker run -d -p 8983:8983 -p 8998:8998 -p 8999:8999 -t solr
启动镜像
调试
docker 进入开启的solr镜像,输入下面命令
solr -f -a "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:8999" -port 8998
8998 是web访问页面,8999是调试端口,要加0.0.0.0 防止连接不上
流程分析
Solr的流程有很多条,我这里以http://127.0.0.1:8998/solr/admin/info/system
这个路径作为案例来走一遍流程
查看web.xml
所有的路径都走SolrRequestFilter
在
org.apache.solr.servlet.SolrDispatchFilter#doFilter 搭上断点
进入
首先判断路径是否在excludePatterns 中,如果是则直接过掉filter
excludePatterns可以在web.xml 里面看到配置
这里的作用应该就是静态路径不再走下面流程了。
然后进入
his.authenticateRequest(request, response, wrappedRequest)
我们这里是默认安装的,所以没有权限校验
直接返回true了。
接着进入
找到一个call,
进入org.apache.solr.servlet.SolrDispatchFilter#getHttpSolrCall
这里根据路径有两种call,我们正常的路径返回的是http类型的,还有一种是v2的,
接着往下走,
进入主要的call()方法。
进入
org.apache.solr.servlet.HttpSolrCall#call
进入其中的初始化部分
跟进后
这里的主要作用是判断action 类型
一直跟进到org.apache.solr.handler.RequestHandlerBase#getRequestHandler
看到这里是根据路径找到requesthandler
由于我们的路径为admin/info/system
获取到的action类型为admin
进入到了第一个case
开始处理requesthandle
一直跟进到org.apache.solr.handler.RequestHandlerBase#handleRequest
跟进到this.handleRequestBody(req, rsp);
一直跟进到 org.apache.solr.handler.admin.InfoHandler#handle
根据name找到handles中的handle
再进入
handler.handleRequest(req, rsp);
处理
又一次进入了org.apache.solr.handler.RequestHandlerBase#handleRequest
这一次的handle为SystemInfoHandler
进入其中的org.apache.solr.handler.admin.SystemInfoHandler#handleRequestBody
这里就是从路径找到功能的最后地方了最后的地方了
处理好请求之后又回到org.apache.solr.servlet.HttpSolrCall#handleAdminRequest
下面就是处理一下response了
到次完成。