有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧,

但是细想想,是真的么?,忙到这几个字都没时间打么?毕竟大家都很忙的,所以忙并不是啥理由.

那是因为啥呢?感觉就只有一个理由能站得住脚了,就是因为"懒". 哈哈....

尬聊了一段,活跃下气氛,下面进入正题

场景

在实际工作中,大家可能也都遇到过这样的情况 :

一个正在更新迭代过程中项目,会收到大量业务部门的需求,这些需求可能会来自于不同业务部门,或者不同的产品经理

而项目的onwer则需要接收到这些需求,对这些需求进行初步的分析和排期,但是在排期的过程中,会有这样一种尴尬的情况发生.

比如,有两个互不嗒噶的产品经理,针对同一功能点,提出了两个不同业务改造的需求点,两个需求点要求上线的时间很接近,但是又出于某种原因,不能同时上线,或者产品经理根本无法确定上线时间,而告诉你尽快完成开发/测试,他则根据实际情况确定业务需求的发布时间

那么,对于这种情况,通常会采用开分支的方式进行开发,即不同版本的并行需求的开发在不同分支上同时进行开发,那么,团队成员(开发/测试),则可以同时的开展工作,有的负责A需求,有的负责B需求,互不影响

起初开发阶段的时候,一切很顺利,但是等到开发完毕提测后,测试介入,系统要打入测试环境进行集成测试的时候,那么问题就来了.

A版本和B版本,目前所属在不同分支上,如果要同时进行集成测试,那系统应该如何部署呢?

方案

根据上述场景,其实核心问题是,在不添加多套集成测试的环境下,也能针对同一个服务的不同版本,同时进行测试.

我们项目是基于spring cloud构建的,那么解决的思路就是,在网关层根据不同的版本号进行判断,重新指派网关路由的serviceId,那么下面看相关的实现:

架构图

在这里输入图片标题

相关实现

首先,在不同的分支上定义不同的版本号,然后将应用名称拼接上版本号,这样应用在注册到eureka的时候,由于版本号不同,那么就会被认定为是不同的服务

info.app.version=v1 # 其他分支上定义其他版本号
spring.application.name=service-a-${info.app.version}
复制代码

其次,在zuul层添加路由拦截器,主要是抓取版本号(当然,这个版本号不一定要放在header里面),获得zuul预先根据url根匹配的serviceId,然后拼接上版本号,让其路由到正确的服务中,达到改变代理行为的目的

@Component
public class VersionChangeFilter extends ZuulFilter {@Autowiredprivate DiscoveryClient discoveryClient;@Overridepublic String filterType() {return ROUTE_TYPE;}@Overridepublic int filterOrder() {return 9;}@Overridepublic boolean shouldFilter() {RequestContext ctx = RequestContext.getCurrentContext();return ctx.sendZuulResponse();}@Overridepublic Object run() {RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();String version=request.getHeader("version");if(StringUtils.isNotBlank(version)){String serviceId=String.valueOf(ctx.get("serviceId")).concat(version).toLowerCase();List<String> services = discoveryClient.getServices();if(services.contains(serviceId)){ctx.set("serviceId",serviceId);}}return null;}
}
复制代码

结束

这样一来,在不增加任何环境资源的前提下,可以实现不同版本服务的服务同时发布.满足了并行集成测试的需求

当然,还是那句话,解决同样问题的方法有多种,我上述的方法也不一定是最好的,如果有更好经验的同学,欢迎大家踊跃讨论.

关于本文内容 , 欢迎大家的意见跟建议

代码仓库 (博客配套代码)

  • udf-starter : 基础项目,脚手架,框架

想获得最快更新,请关注公众号

在这里输入图片标题

spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求相关推荐

  1. Spring Boot教程(二十):Spring Boot使用String Task定时任务

    一.JAVA常见的几种定时任务比较 Timer:jdk自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让程序按照某一个频度执行, ...

  2. spring boot / cloud (二) 规范响应格式以及统一异常处理

    spring boot / cloud (二) 规范响应格式以及统一异常处理 前言 为什么规范响应格式? 我认为,采用预先约定好的数据格式,将返回数据(无论是正常的还是异常的)规范起来,有助于提高团队 ...

  3. 想知道spring boot+cloud+docker的微服务体系架构如何使用吗?

    本文通过使用Spring Boot,Spring Cloud和Docker构建一个应用程序的示例,为了解常见的微服务架构模式提供了一个起点. 作为这个系统的基础,我选择了一个旧项目,其后端曾经是一个整 ...

  4. 一步一步学Spring Boot(二)课程发布了~~~

    课程名称 <一步一步学Spring Boot(二)> 学习地址 CSDN学习地址: http://edu.csdn.net/lecturer/994 51CTO学习地址:http://ed ...

  5. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程(十五)

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  6. Spring Boot教程(十五)使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程...

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  7. Spring Boot/Cloud 界面与安全设计

    Spring Boot/Cloud 界面与安全设计 一.后端渲染 Thymeleaf 二.后端渲染 Freemarker 三.后端渲染 jsp 四.前端渲染 vue 五.原生 json 请求(自) 六 ...

  8. 【转帖】是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了。

    是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了. 2019/01/03 http://www.ityouknow.com/springboot/2019/01/03/spr ...

  9. Spring Boot/Cloud干货汇总(持续更新:20180226版)

    抽空对本号推送的Spring相关内容做个汇总整理,包括: - Spring - Spring Boot - Spring cloud - 其他Spring干货内容 Spring Boot专题 基础入门 ...

最新文章

  1. python写appium测试用例找控件的方法总结
  2. Linux常用编辑器使用:vi、vim、nano、gedit
  3. ecplise tomcat启动报错
  4. python import io_Python3 IO
  5. 菜鸟成长日记(五)之WMIC简单命令应用
  6. springMVC 控制层添加异步线程
  7. 20181127-1 附加作业 软件工程原则的应用实例分析
  8. 网站布局中遇到的一些问题
  9. Selenium之Chrome浏览器的启动问题及解决
  10. git报错:no matching key exchange method found
  11. 中间人攻击利用框架bettercap测试
  12. JVM监控及诊断工具GUI篇之Arthas(三):class、classloader相关指令
  13. 《计算机网络 自顶向下》第八章==网络安全
  14. 虚拟局域网服务器群晖,基于虚拟机的黑群晖NAS+基于虚拟局域网的远程访问
  15. 软考高级-信息系统管理师之综合测试与管理(最新版)
  16. Lambda表达式详细总结
  17. XP系统下MSDTC不可用解决办法
  18. [转]计算机程序设计的史诗TAOCP
  19. 从拟物化到扁平,再到Material Design
  20. CGB2105-Day19

热门文章

  1. 源码安装collectd系统监控和统计工具
  2. Fast上传图片成功,FastDFSweb页面显示失败
  3. Git Merge代码失败 解决
  4. Excel中,条件格式的跟多应用-「数字条」「图标集」
  5. java short uuid_MySQL-使用UUID_SHORT( ) 的问题
  6. textarea的maxlength属性兼容解决方案
  7. Project file is incomplete. Expected imports are missing 错误解决方案
  8. 安装ubuntu出现BUG soft lockup的解决方法(16.04 14.04)
  9. 关于C#关闭窗体后,依旧有后台进程在运行的解决方法
  10. Springboot中关于跨域问题的一种解决方法