电商笔记-测试环境隔离开发环境

因为一些业务原因我会隐藏一些细节,可能后面客官会猜到因为什么。
20190928注:这文章是最早写的,其实最简单的方案是在开发环境设置client的地址为测试服务器地址:
eureka:
  instance:
    prefer-ip-address: true              #以IP地址注册到服务中心
    instance-id: http://192.168.1.4:8110 #服务中心的信息显示(如果IP地址不显示的话,进行配置)
    									  此配置最好在部署服务的时候加在启动命令中,而非写死在配置文件

如题,目的是想让测试环境不会访问开发环境的服务。

1 先说一个失败的方案。如果对此不感兴趣,可以跳到方案2.

项目结构如下:

 product-service
 		| -- src
 				|main
 		    		| -- java
 		    		| -- resources
 		    				| -- doc
 		    				| -- ...
 		    				| --  application.yml
 		    				| --  ...
 		    				| -- application-test7.yml

这里application.yml配置如下

spring:
  profiles:
    active: test7
  jackson:
    serialization:
      FAIL_ON_EMPTY_BEANS: false

意思比较明确,就是在开发环境使用application-test7.yml的配置文件的配置。application-test7.yml(以下将简称test7)部分配置:

eureka:
  instance:
    ## 心跳间隔,5秒
    leaseRenewalIntervalInSeconds: 5
    ##没有心跳的淘汰时间,10秒
    lease-expiration-duration-in-seconds: 10
    prefer-ip-address: true
    ip-address: x.x.x.8
  client:
    # 定时刷新本地缓存时间 默认30s
    registryFetchIntervalSeconds: 5
    serviceUrl:
      defaultZone: http://x.x.x.106:899/eureka/

product服务在测试环境启动以后,注册到106服务器的Eureka,本地开发环境的服务也注册到了106服务器。当测试同学测试的时候,发现接口时好时坏。
原因是这样的:
当前端调用api时,网关将请求分发到在Eureka注册的服务器,当分发到测试环境服务器时,服务器响应了,当分发到开发pc时,因为请求不到内网ip出现请求错误。
因此我提供了一个简单的解决方案:

 product-service
 		| -- src
 				|main
 		    		| -- java
 		    		| -- resources
 		    				| -- doc
 		    				| -- ...
 		    				| --  application.yml
 		    				| --  ...
 		    				| -- application-test7.yml
 		    				| -- application-dev.yml

并在application.yml配置如下

spring:
  profiles: application-dev.yml
    active: 
  jackson:
    serialization:
      FAIL_ON_EMPTY_BEANS: false

以此将开发环境与测试环境隔离。我擦,太简单了。

可是

这样并不能解决问题,因为在开发环境中有服务之间调用会出现问题。比如:
我开发a服务,需要调用另一个小伙伴的b服务,如果使用上面的配置,a服务注册到了dev环境的Erueka,可是b服务有可能尚未在dev环境的Eureka注册。

方案2:

因此最简单的方式应该是:开发环境不注册Eureka。
对此, 在启动类加入了参数

public class MfCodeGoodsApplication {

    private static final String SHUT_DOWN_ERREKA = "shutdowneureka";
    private static final String SHUT_DOWN_ERREKA_VAL = "true";

    public static void main(String[] args) {
        SpringApplication.run(MfCodeGoodsApplication.class, args);
        for(String arg:args){
        	// 如果工程启动时候,给main函数加了参数,就解析出来
            String[] param = arg.trim().toLowerCase().split("=");
            // 如果参数带有 SHUT_DOWN_ERREKA=true
            if (param.length > 1 && SHUT_DOWN_ERREKA.equals(param[0])) {
                if (SHUT_DOWN_ERREKA_VAL.equals(param[1])) {
                	// 不注册Eureka
                    DiscoveryManager.getInstance().shutdownComponent();
                }
            }
        }
    }
}

在这里插入图片描述
idea加入启动参数的方式。

这样一来,开发环境和测试环境使用相同配置,但开发环境关闭了Eureka的注册,所以测试环境不会请求开发环境,但是开发环境的可以请求测试环境。
以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值