Springcloud如何编写示例代码实现服务多版本控制?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1452个文字,预计阅读时间需要6分钟。
需求+小程序新版本上线需审核,如有接口新版本返回内容发生变更,后端直接上线会导致旧版本报错,不上线又通不过审核。+之前是通过写新接口来兼容,但这样会有很多兼容问题。
需求
小程序新版本上线需要审核,如果有接口新版本返回内容发生了变化,后端直接上线会导致旧版本报错,不上线审核又通不过。
之前是通过写新接口来兼容,但是这样会有很多兼容代码或者冗余代码,开发也不容易能想到这一点,经常直接修改了旧接口,于是版本控制就成了迫切的需求。
思路
所有请求都是走的网关,很自然的就能想到在网关层实现版本控制。首先想到的是在ZuulFilter过滤器中实现,前端所有请求都在请求头中增加一个version的header,然后进行匹配。但是这样只能获取到前端的版本,不能匹配选择后端实例。
查询资料后发现应该在负载均衡的时候实现版本控制。同样是前端所有请求都在请求头中增加一个version的header,后端实例都配置一个版本的tag。
实现
首先需要说明的是我选择的控制中心是consul,网关是zuul。
负载均衡策略被抽象为IRule接口,项目默认情况下使用的IRule的子类ZoneAvoidanceRule extends PredicateBasedRule,我们需要实现一个PredicateBasedRule的子类来替换ZoneAvoidanceRule。
本文共计1452个文字,预计阅读时间需要6分钟。
需求+小程序新版本上线需审核,如有接口新版本返回内容发生变更,后端直接上线会导致旧版本报错,不上线又通不过审核。+之前是通过写新接口来兼容,但这样会有很多兼容问题。
需求
小程序新版本上线需要审核,如果有接口新版本返回内容发生了变化,后端直接上线会导致旧版本报错,不上线审核又通不过。
之前是通过写新接口来兼容,但是这样会有很多兼容代码或者冗余代码,开发也不容易能想到这一点,经常直接修改了旧接口,于是版本控制就成了迫切的需求。
思路
所有请求都是走的网关,很自然的就能想到在网关层实现版本控制。首先想到的是在ZuulFilter过滤器中实现,前端所有请求都在请求头中增加一个version的header,然后进行匹配。但是这样只能获取到前端的版本,不能匹配选择后端实例。
查询资料后发现应该在负载均衡的时候实现版本控制。同样是前端所有请求都在请求头中增加一个version的header,后端实例都配置一个版本的tag。
实现
首先需要说明的是我选择的控制中心是consul,网关是zuul。
负载均衡策略被抽象为IRule接口,项目默认情况下使用的IRule的子类ZoneAvoidanceRule extends PredicateBasedRule,我们需要实现一个PredicateBasedRule的子类来替换ZoneAvoidanceRule。

