在微服务构架中,一个项目产品会涉及很多个服务,而且维护人员也很多。在开发过程中,本地调试能够极大地提升开发效率,但在微服务构架中,本地调试经常会遇到很大的问题。
当一个服务依赖多个服务时,如果需要在本地环境对这个服务进行调试,此时,测试环境如果部署在其他机器上或者云服务上,本地与测试服务网络必然会不通,在本地把所有服务都运行起来也不现实。
所以,如何才能解决本地与测试服务之间的网络问题呢?
一、概述
假设测试环境的服务是在测试云服务器上基于 Docker 容器部署的,注册中心和所有的服务都处于容器环境内。
测试服务器 IP 为:192.168.1.132
测试服务器 Docker 内部微服务 IP 为:192.100.1.100
如果在测试服务器请求 Docker 服务时,相当于宿主机访问容器网络,没有任何问题。
$ curl http://192.100.1.100:8080/actuator/health
{"status":"UP"}
在本地环境使用以上命令则会报网络异常。
二、本地调试
本地环境可以使用代理来解决这个问题,最简单的方式就是使用 ssh 命令创建 socks 代理,然后本地通过代理来访问测试环境的容器服务。
前提是本地环境必须与测试环境网络是通的,并且能通过 ssh 访问测试服务器。
1. 启动代理服务器
本地电脑上使用 ssh 命令来启动代理服务器:
$ ssh -qfnN -D 127.0.0.1:18888 username@192.168.1.132
命令中 127.0.0.1:18888
指定本地电脑的 18888 端口为代理服务器。
username@192.168.1.132
和使用 ssh 连接测试服务器命令一样。
执行成功后本地代理服务器就起来了。
2. 使用代理客户端
本地电脑上使用代理客户端来连接测试服务器的容器服务。
可以使用 Proxifier 全局代理软件来配置代理访问,指定 192.100.*.*
的请求才走代理,配置如下:
配置成功后,可以在本地访问测试环境的容器服务了。
$ curl http://192.100.1.100:8080/actuator/health
{"status":"UP"}
也可以在本地服务启动时,使用 JVM 参数来指定代理服务器,例如:
$ java -jar -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=18888 App.jar
通过 JVM 配置只能在 Java 应用中进行访问,本地电脑其他软件不能访问。
原文始发于微信公众号(CodeArtist):巧用代理实现本地调用测试容器微服务
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/126703.html