测试环境下,多用户使用同一环境导致冲突的解决方案

  1. 问题描述:

    1. 问题一:

A、B两个同学,同时使用betaA环境启动服务,这时候会出现Dubbo客户端可能会无法精确定位到某台服务,Kafka消息可能被两个服务任意一个消费掉。出现数据库状态发生变化,却看不到日志的问题,给很多同学造成困扰。

  1. 问题二:

为避免问题一,A测试同学使用betaA时,其他测试和开发同学就不能使用betaA,如果亟需使用betaA的库中的数据,就要修改db.properties,用完之后忘记还原,不小心会提交,造成不一致的问题。

  1. 问题三:

开发同学有时通过修改dubbo的group和Kafka的group.id可以临时解决该问题,但一样会出现误提交的问题。

  1. 解决方案:

    group上加可配置后缀,默认为空,对现有group无影响

  1. 实现方式

以betaA为例

在现有的group基础上,可以通过maven的properties,命令行,系统参数任意添加后缀。

  1. 添加后缀变量

    在dubbo调用时,需要在dubbo的service.group和reference.group的都加上,    具体到配置文件,如图所示:

  1. dubbo-provider.properties:

    

  1. dubbo-consumer.properties:

 

  1. kafka.properties:

  1. 默认值设为空

当不在命令行配置此变量时,要恢复现有状态,不对现有的group产生任何影响。如下图:

必要的配置:

  1. 在命令行中配置变量

compile和package时,在命令行指定group.suffix的值:

  1. 命令行添加:

mvn clean -DskipTests=true -Dgroup.suffix=zhangxl package

如果时ide工具,也可以添加命令行参数

  1. idea

    添加步骤

第一步

第二步

  1. eclipse添加步骤:

第一步:Run AS àRun Configurations

第二部:如图

 

  1. Jenkins添加步骤:

 

  1. 编译结果:


  1. 可解决的问题:

    1. 通过对group添加动态后缀的方式,不修改配置文件的前提下解决开发和测试环境冲突的问题。
    2. 默认后缀变量值为空,即使当前的group保持原样不变。只有在命令行中添加了-Dgroup.suffix=value时才会变化,可以自由选择配置。
    3. 兼容命令行,IDE工具和Jenkins。
    4. 建议开发同学都在IDE中配置该变量,测试同学有时需要与其他系统(如结算,资负)进行联调,Jenkins中暂时不配。
  2. 延伸扩展:

结合maven的profile和spring的profile可以去除所有重复性配置,如Kafka的topic和定时任务的cronExpression配置,详情可以看:《使用Maven和Spring的profile功能实现不同运行环境的切换》

猜你喜欢

转载自blog.csdn.net/xinfei0803/article/details/80079342