微服务开发调试技巧-第二部
上篇,我们介绍了一些微服务开发调试的技巧,但是并未覆盖所有应用场景。
当环境隔离较为严重时,往往服务器上的微服务注册到nacos的地址,本机是访问不到的。
例如:微服务在docker容器中,并未暴露端口到宿主机。
【解决思路】让java程序的所有网络请求都走代理,而这个代理服务器是可以访问到其他微服务的。
安装socks代理服务
yum install 3proxy
编辑配置文件,清空后,填写以下内容
vim /etc/3proxy.cfg
#nserver 8.8.8.8
#nserver 8.8.4.4
nscache 65536
maxconn 1000
log /var/log/3proxy-%y%m%d.log D
rotate 7
external 0.0.0.0
internal 0.0.0.0
auth none
allow *
proxy -a -p6666
socks -p6667
启动
nohup 3proxy /etc/3proxy.cfg > /var/log/proxy.log 2>&1 &
测试是否成功
curl --proxy socks5://localhost:6667 https://baidu.com
修改JVM参数
给本机服务添加以下启动参数:
-DsocksProxyHost=192.168.0.66 -DsocksProxyPort=6667
将ip修改为上文搭建3proxy的可访问的服务器ip
- 如果有openVPN,则填对应的虚拟局域网ip
- 如果没有其他连通方式,则通过内网穿透,将6667端口穿透出来
idea启动项目添加jvm参数的方法,自行搜索,此文不赘述。
进化版
无需服务端安装代理服务,一般本地连通服务器是通过ssh,我们可以将ssh隧道转换成socks代理。
-
使用 SSH 创建 SOCKS 代理
ssh -p 22 -D <local_port> <username>@<remote_host>
-
保持隧道连接
如果你希望SSH隧道在后台运行并保持连接,可以加上-f(后台运行)和-N(不执行命令)选项:
ssh -p 22 -D 1080 -f -N user@example.com
-f:使SSH在后台运行。
-N:表示不执行远程命令,仅建立隧道连接。
-p: 指定ssh连接的端口
对比:
ssh的方式,优点是不需要额外的端口,服务器不需要安装其他软件。缺点是每个客户端都需要自行开启socks代理。服务端安装代理服务的方式则恰恰相反,优点是无需每个客户端的额外操作,缺点是需要安装软件和暴露额外端口