-
问题描述:
-
问题一:
-
A、B两个同学,同时使用betaA环境启动服务,这时候会出现Dubbo客户端可能会无法精确定位到某台服务,Kafka消息可能被两个服务任意一个消费掉。出现数据库状态发生变化,却看不到日志的问题,给很多同学造成困扰。
-
问题二:
为避免问题一,A测试同学使用betaA时,其他测试和开发同学就不能使用betaA,如果亟需使用betaA的库中的数据,就要修改db.properties,用完之后忘记还原,不小心会提交,造成不一致的问题。
-
问题三:
开发同学有时通过修改dubbo的group和Kafka的group.id可以临时解决该问题,但一样会出现误提交的问题。
-
解决方案:
group上加可配置后缀,默认为空,对现有group无影响
-
实现方式
以betaA为例
在现有的group基础上,可以通过maven的properties,命令行,系统参数任意添加后缀。
-
添加后缀变量
在dubbo调用时,需要在dubbo的service.group和reference.group的都加上, 具体到配置文件,如图所示:
-
dubbo-provider.properties:
-
dubbo-consumer.properties:
-
kafka.properties:
-
默认值设为空
当不在命令行配置此变量时,要恢复现有状态,不对现有的group产生任何影响。如下图:
必要的配置:
-
在命令行中配置变量
compile和package时,在命令行指定group.suffix的值:
-
命令行添加:
mvn clean -DskipTests=true -Dgroup.suffix=zhangxl package
如果时ide工具,也可以添加命令行参数
-
idea
添加步骤
:
第一步
第二步
-
eclipse添加步骤:
第一步:Run AS àRun Configurations
第二部:如图
-
Jenkins添加步骤:
-
编译结果:
-
可解决的问题:
-
通过对group添加动态后缀的方式,不修改配置文件的前提下解决开发和测试环境冲突的问题。
-
默认后缀变量值为空,即使当前的group保持原样不变。只有在命令行中添加了-Dgroup.suffix=value时才会变化,可以自由选择配置。
-
兼容命令行,IDE工具和Jenkins。
-
建议开发同学都在IDE中配置该变量,测试同学有时需要与其他系统(如结算,资负)进行联调,Jenkins中暂时不配。
-
-
延伸扩展:
结合maven的profile和spring的profile可以去除所有重复性配置,如Kafka的topic和定时任务的cronExpression配置,详情可以看:《使用Maven和Spring的profile功能实现不同运行环境的切换》