IntelliJ IDEA 远程调试 Elasticsearch6.1.2
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
在深入学习 elasticsearch 的过程中,遇到有疑惑的源码时,如果能打断点单步调试,往往会取得事半功倍的效果,今天的实战内容就是通过 IntelliJ IDEA 远程连接运行中的 elasticsearch 服务,然后单步运行代码;
环境信息
本次实战会用到两台电脑,一台 Ubuntu 运行着 elasticsearch6.1.2 版本,另一台 Win10 运行着 IntelliJ IDEA,详细的版本信息如下:
操作系统:Ubuntu 18.04.2 LTS
JDK:1.8.0_191
Gradle:4.6
elasticsearch:6.1.2
IntelliJ IDEA: 2018.2.4 (Ultimate Edition)
当然,您也可以将 elasticsearch 和 IntelliJ IEDA 运行在同一台电脑上,并没有什么差别;
Ubuntu 上的操作
在 Ubuntu 上做以下设置:
打开 elasticsearch-6.1.2/config/jvm.options 文件,在尾部增加以下一行内容,注意 5678 是个没有被占用的端口:
正常启动 elasticsearch,如果没有选择后台启动,可以在控制台看到如下信息,可见已经开始监听 5678 端口了:
IntelliJ IDEA 上的操作
elasticsearch 启动成功后,回到要运行 IntelliJ IDEA 的电脑上,执行以下操作:
下载 elasticsearch6.1.2 源码,地址是:https://github.com/elastic/elasticsearch/releases
上述网站中有各个版本的 release,找到我们需要 的 6.1.2 版本,然后下载压缩包,如下图:
下载完毕后,解压得到 elasticsearch-6.1.2 目录,打开命令行进入该目录,执行 gradle idea,将源码生成 IntelliJ IDEA 工程:
打开 IntelliJ IDEA,用 import 的方式导入上述工程,注意选择类型为 Gradle,如下图:
注意 Gradle 的版本号,推荐 4.6 版本,如下图:
等待 IDEA 导入依赖和构建完成,如下图:
源码导入成功后开始远程调试,菜单操作如下图:
新增一个远程配置,如下图:
在新配置项的设置窗口,按照下图所示进行配置,输入合适的配置名称,elasticsearch 服务所在机器的 IP 地址,端口号 5678,然后点击底部的 OK 按钮:
如下图,这时候在工具栏上可以看见上面配置的 elastic6.1.2,选中后点击红框 2 中的 debug 按钮,即可开始远程连接:
如果网络连接正常,会提示远程连接成功,如下图:
来试试断点的效果吧,打开类 org.elasticsearch.rest.RestController,这是 elasticsearch 处理 web 请求的入口类,在 dispatchRequest 方法中打个断点,位置是调用 tryAllHandlers 方法那一行,如下图红框所示:
向 elasticsearch 发起一次 PUT 请求,创建名为"index101"的索引,url 是"http://192.168.50.75:9200/index101",此时断点会立即生效,如下图,线程调用栈一目了然,是基于netty的server服务,变量值也应有尽有,对我们阅读源码很有帮助:
至此,IntelliJ IDEA 远程调试 elasticsearch 的实战就完成了,在您学习 elasticsearch 的过程中,希望本文能给您带来一些参考。
建议
除了远程调试,自己修改和编译 elasticsearch 源码也是有效的学习手段,推荐您参考文章《Elasticsearch6.1.2源码下载和编译构建》。
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/494e16ef5fdbf3040bd1a52da】。文章转载请联系作者。
评论