功能
本地IDE可以通过连接B端管理系统实现对远程线上java服务进行调试
背景
很多时候线上服务出现了故障,希望能够对线上服务器进行本地调试。
- jrdwp实现了这个功能,原理其实很简单:
- 本地IDE(tcp连接)
- 本地jrdwp client(用tcp协议和ide通信,websocket和远端nginx通信)
- 远端ngiinx(代理websocket)
- 远端jrdwp server (提供websocket服务,并且用tcp和远端java服务通信)
- 远端java服务
- 然而没有权限接触公司的nginx,但是有B端服务,系统是支持websocket协议,所以可以使用spring boot websocket服务代替远端jrdwp server服务。
- 本地IDE —》 本地jrdwp client —》网关 —》 spring boot服务 —》 远端java服务
实现步骤
-
改造jrdwp代码
- 只保留client代码
- 支持通过ws-schema启动参数配置wss协议
- 简化权限认证,通过参数配置token即可
-
Spring boot server服务启动websocket服务
- 启动websocket服务,接受来自websocket client的长连接
- 接受到客户端连接后,通过参数和远端java服务创建一个tcp连接
- websocket服务充当数据中转桥梁
-
Spring boot server提供一个返回bash命令的接口
- 使用者只需要在本机执行一条命令,执行从接口拿到的bash命令
- bash命令包括以下内容
- 下载jrdwp执行文件
- 赋予jrdwp执行权限
- 拼接好参数启动jrdwp client
demo
具体步骤可以看demo源码
- 下载源码
git clone https://github.com/angryfang/jrdwp.git
cd jrdwp
- 进入java目录, 启动过一个远程demo,启动一个spring boot websocket服务
cd server
mvn clean package -DskipTests
./start-remote.sh
./start-server.sh
- 进入go目录,启动jrdwp客户端
cd go
go build jrdwp.go
./start-client
4.启动IDE调试
|