目前团队中先后端联调是较之我的单独开发相对耗时的一个环节,主要体如今:html
代码更新 - 编译&部署 - 验证 - 代码更新
的开发循环,而在beta编译和部署时间则是这个循环的大头,包括切换CI页面的时间、操做push&update的时间、等待build的时间、等待部署的时间,每一步都须要肉眼确认,没法自动化。虽然人脑上下文切换的时间若是熟练以后也挺快的,可是beta部署不像本地部署能够应用热部署技术,beta部署的时间代价没法缩减。本文的目的是经过将联调本地化,减小部分枯燥劳动、以及无效的等待时间,提升团队的开发效率。前端
业务团队目前开发的API基本是两种形式:WebAPI和RpcAPI,WebAPI一般是指以超文本传输协议(HTTP/HTTPS)为基础的API,是现代流行的对外部第三方开发者提供服务的方式。例如Github API,它的编码风格——特征状态转移(Rest)被你们视为经典;RpcAPI则是经过各种RPC协议为基础的API,各个公司的组件有所不一样,团队中用的是Pigeon。web
下文将分为相应的两个部分阐述。apache
为了作到本地联调,只须要确保前端能访问到后端Tomcat上的应用便可。以macOS为例,我收集了相关的资料,有些步骤是实验证实没必要要的,有些步骤则是必须的。segmentfault
【不须要】关闭后端系统偏好设置-安全性与隐私-防火墙
【须要】设置防火墙的端口转发和访问本机外网IP的权限。具体的设置方法再也不赘述。安全
# 对本地IP的Tomcat默认端口8080访问重定向到80端口,这样就能够直接使用域名访问了,避免有些应用会禁止非80端口的访问。 rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080 rdr pass on en0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080 # 相似的,容许外部机器经过外网IP(172.22.54.89)访问本机,顺便把8080端口重定向也设置了 rdr pass on lo0 inet proto tcp from any to 172.22.54.89 port 80 -> 172.22.54.89 port 8080 rdr pass on en0 inet proto tcp from any to 172.22.54.89 port 80 -> 172.22.54.89 port 8080
配置文件位于/etc/hosts
。服务器
【不必定须要】将beta域名的DNS地址重定向到本地网络
#127.0.0.1 web-application.dev.meituan.com
【不必定须要】双方机器的IP切换到不一样路由器下。app
这是由于无线热点配置了AP隔离的安全特性:挂在同一Wifi AP下的机器禁止经过路由机(实际上是交换机)自己相互访问。
ID | 机器 | SSID | IP |
---|---|---|---|
1 | mac | mtdp | 172.22.54.89 |
2 | mobile | mtdp_tech | 172.22.38.121 |
3 | mobile | mtdp | 172.22.50.98 |
1号机访问2号机的traceroute回显,能够看到正常访问。
1号机访问3号机的traceroute回显,能够看到网络包在网关这一层就被丢弃了。这也就解释了mac和手机处于mtdp时,Charles抓包失败的状况。
配置文件位于%TOMCAT_HOME%/conf/context.xml
。
【不须要】设置以下的IP过滤器,保持默认便可。
<Context privileged="true" antiResourceLocking="false" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="xxx.xxx.xxx.xxx"/> </Context>
【不须要】更改Engine的defaultHost为外部IP,保持localhost便可。
<Engine name="Catalina" defaultHost="xxx.xxx.xxx.xxx">
【不须要】更改Host的name为外部IP,保持localhost便可。
<Host name="xxx.xxx.xxx.xxx" appBase="webapps" unpackWARs="true" autoDeploy="true">
【须要】配置相同的泳道。
Pigeon是公司内部的Rpc组件,支持泳道特性,大大简化了配置过程。配置了泳道,全部的请求也会被隔离起来了,在A泳道里的请求只会发送给A,而不会发送给B。利用该特性,咱们能够把Rpc上下游的服务都加入到同一个泳道中,使双方的IP位于服务发现列表的第一位。
上下游双方编辑本地文件/data/webapps/appenv
,在文件末尾新添加一行swimlane=XXX
,此处的值能够是任意的,尽可能不要和其余人配置相同就能够了。而后双方各自启动服务,在test.pigeon.sankuai.com
中或者访问ServiceIP:4080/services
确认已位于统一泳道。