目录目录 背景 我们的目标:同时可并行多项目开发 为了实现这个功能,我们解决了2个路由问题!WEB服务路由 和 Dubbo服务路由?解决WEB服务路由问题?解决Dubbo服务路由的问题? 实现思路 接入方式前端(Daily和UAT)Nginx后端服务 案例实践 背景 在开发过程中,经常遇到的事情就是抢占环境,或是某个特性的变更对其他业务有影响,阻塞了其他项目的联调等。 核心原因是服务没有隔离,这里的服务包括应用程序服务和中间件服务。 我们的目标:同时可并行多项目开发 在一个调用链非常长的功能中,如果想修改其中的一个特性,并进行测试,而又不影响该环境的其他用户使用功能、特性, 例如:服务之间的调用关系链路:A->B->C→D 以上,三个项目同时进行,三个项目的标签分别是:Feature1、Feature2、Feature3 Feature1项目:涉及到B、C、D三个服务,所以,整体链路的数据流是:A(Daily标准环境)-》B(Feature1新环境B)-》C(Feature1新环境C) -》D(Feature1新环境D) Feature2项目:只涉及到A服务更新,所以,整体链路的数据流是:A(Feature2新环境A)-》B(Daily标准环境)-》C(Daily标准环境)-》D(Daily标准环境) Feature3项目:只涉及到C服务更新,所以,整体链路的数据流是:A(Feature2新环境A)-》B(Daily标准环境)-》C(Feature3新环境C)-》D(Daily标准环境)为了实现这个功能,我们解决了2个路由问题!WEB服务路由 和 Dubbo服务路由?解决WEB服务路由问题? 第一步:Web服务标签路由切换 我们主要利用了nginx的map hash配置来区分,根据请求header中的X-Feature-Tag不同值,来区分不同的标签服务 流程: 解决Dubbo服务路由的问题? 第二步:Dubbo服务路由标签切换 (1)引入frxs-ec-feature-1.0.0-RELEASE.jar包 (1)Feature tag上报流程 服务启动时JVM参数中添加启动参数,-Dfeature.tag=v1.1.1,为当前服务打上v1.1.1的标签 启动命令:java -Dfeature.tag=v1.1.1 -jar svcC.jar 开发环境: (2)利用Dubbo的特性,分别对Dubbo的Router和Filter做了扩展了,进行对consumer服务和provider服务打标,意思就是把服务进行Tag标记 router扩展: com.frxs.ec.feature.router.CustomTagRouter filter扩展: com.frxs.ec.feature.filter.CustomTagFilter 整体流程: 设想中的Daily环境: 当下部门正在构建开发的Daily环境,也就是想通过隔离的手段规避上述的问题,提升大家的开发效率。