跳转到主要内容

微服务开发中的一些小工具&&小技巧

稍等,我把配置改成生产上的地址

在微服务开发中,通常涉及多个服务、多个团队、异地团队一起合作开发。又因为频繁迭代,频繁发布版本,为了保证版本、代码、环境的一致性,通常使用容器化,既生产上的运行环境、配置信息应该与测试后的版本完全一致。但是我们更多的时候会出现测试通过后,还要说:“稍等,我把配置改成生产上的地址”,一个新的的客户部署一套版本,也要说,“稍等,我把配置改成生产上的地址”,完全丧失了容器化的优势。

穷人的微服务开发环境

如果我们有钞能力,这个问题很好解决,每个研发人员都配置一台服务器,专门用于链条,每个项目组都配置三套环境。

在没有钞能力的情况下,只能借助不同的端口来区分服务,也正因为如此,前面提到的团队协作、异地开发、新老项目同时维护都采用相同的环境变量,配置文件,例如生产上要求的是mysql:3306,redis:6379,测试和开发环境要求的是x.x.x.x:33306,x.x.x.x:63379,就导致反复修改配置文件、互相覆盖配置文件。发生产还要等测试通过了修改配置文件,破坏了测试结果的准确性。

在此背景下,我们强烈推荐服务发现,统一配置中心、环境变量,减少和降低测试通过后的版本,还需要修改代码和配置文件的频率。

将端口转发为与生产一致的端口号

经常修改的配置文件主要集中在数据库、redis等方面,因为要区分端口,很多同事就把IP端口写死在配置文件,当要部署到生产,一个新的项目要部署时候,就需要回来改代码,这很显然是不够科学的。为了应对这一策略,应该将三个环境都用服务发现来连接,在开发的时候,借助端口转工具来将测试环境使用端口区分的服务统一起来。

  • 使用有界面的PORTMAP工具

小工具下载 https://qq829.cn/uploads/software/tools/portmap-1.6.zip

  • 使用命令行


# 增加一个端口转发
# netsh interface portproxy add v4tov4 listenport=<监听端口> listenaddress=<监听地址> connectport=<目标端口> connectaddress=<目标地址>
netsh interface portproxy add v4tov4 listenport=3306 listenaddress=0.0.0.0 connectport=33309 connectaddress=8.134.21.22

# 删除一个端口转发
# netsh interface portproxy delete v4tov4 listenport=<监听端口> listenaddress=<监听地址>
netsh interface portproxy delete v4tov4 listenport=3306 listenaddress=0.0.0.0

# 查看所有的端口转发规则
netsh interface portproxy show all


如上设置和命令,将原本需要修改配置文件的jdbc:mysql://mysql:33306/xxxxx,统一为使用环境变量的 jdbc:mysql://mysql:3306/xxxxx,保证了配置文件的一致性。

在IDEA中使用统一的环境变量设置

env文件可以迁入到代码仓库大家共享,但是idea设置本身并不会迁入到代码仓库,因此不会发生冲突

# .env文件

nacos_host=
nacos_port=
mysql=127.0.0.1
redis=127.0.0.1