spring boot websocket服务当做跳板机实现远程jvm remote debug

功能

本地IDE可以通过连接B端管理系统实现对远程线上java服务进行调试

背景

很多时候线上服务出现了故障,希望能够对线上服务器进行本地调试。

  • jrdwp实现了这个功能,原理其实很简单:
    1. 本地IDE(tcp连接)
    2. 本地jrdwp client(用tcp协议和ide通信,websocket和远端nginx通信)
    3. 远端ngiinx(代理websocket)
    4. 远端jrdwp server (提供websocket服务,并且用tcp和远端java服务通信)
    5. 远端java服务
  • 然而没有权限接触公司的nginx,但是有B端服务,系统是支持websocket协议,所以可以使用spring boot websocket服务代替远端jrdwp server服务。
    • 本地IDE —》 本地jrdwp client —》网关 —》 spring boot服务 —》 远端java服务

实现步骤

  1. 改造jrdwp代码

    • 只保留client代码
    • 支持通过ws-schema启动参数配置wss协议
    • 简化权限认证,通过参数配置token即可
  2. Spring boot server服务启动websocket服务

    • 启动websocket服务,接受来自websocket client的长连接
    • 接受到客户端连接后,通过参数和远端java服务创建一个tcp连接
    • websocket服务充当数据中转桥梁
  3. Spring boot server提供一个返回bash命令的接口

    • 使用者只需要在本机执行一条命令,执行从接口拿到的bash命令
    • bash命令包括以下内容
      • 下载jrdwp执行文件
      • 赋予jrdwp执行权限
      • 拼接好参数启动jrdwp client

demo

具体步骤可以看demo源码

  1. 下载源码
git clone https://github.com/angryfang/jrdwp.git
cd jrdwp
  1. 进入java目录, 启动过一个远程demo,启动一个spring boot websocket服务
#进入服务端目录
cd server
mvn clean package -DskipTests
#启动远端需要测试的服务,开放了10036端口做为jdwp调试端口, 启动8081端口做为服务
./start-remote.sh
#启动调试服务端,websocket服务使用8080端口
./start-server.sh
  1. 进入go目录,启动jrdwp客户端
#进入代码的go目录
cd go
#编译生成jrdwp运行程序
go build jrdwp.go
#开放一个本地8876端口给到idea调试
./start-client

4.启动IDE调试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值