发布日志
发布策略
提醒:版本号右边, ↑
表示>=该版本号, ↓
表示<=该版本号
提醒:Spring Boot版本和Spring Cloud Alibaba版本需要在版本号后面加上.RELEASE
版本
状态
SC版本
SB版本
SCA版本
6.3.2
H.SR5 ↑
H
G
F
2.3.x
2.2.x
2.1.x
2.0.x
2.2.x
2.2.x
2.1.x
2.0.x
5.6.0
G
2.1.x
2.1.x
4.15.0
F
2.0.x
2.0.x
3.20.2
E
1.5.x
1.5.x
2.0.x
D
1.x.x
N/A
1.0.x
C
1.x.x
N/A
表示维护中 | 表示不维护,但可用,强烈建议升级 | 表示不维护,不可用,已废弃
6.x.x版本(同时适用于Finchley、Greenwich和Hoxton以及未来的更高版本),将继续维护
5.x.x版本(适用于Greenwich)已废弃
4.x.x版本(适用于Finchley)已废弃
3.x.x版本(适用于Edgware)不维护,但可用,强烈建议升级
2.x.x版本(适用于Dalston)已废弃
1.x.x版本(适用于Camden)已废弃
版本变更
无中间件版本变更
功能迭代
基于RESTful层面的功能全景
增加新的灰度蓝绿环境隔离路由触发方式
① 基于Http Query Parameter灰度蓝绿环境隔离路由
通过取值Query Parameter方式,即可实现既定功能
http://localhost:5001/discovery-guide-service-a/invoke/gateway?a=1
http://localhost:5001/discovery-guide-service-a/invoke/gateway?a=2
② 基于Http Cookie灰度蓝绿环境隔离路由
通过取值Cookie方式,即可实现既定功能
③ 基于域名灰度蓝绿环境隔离路由
通过取值域名前缀等方式,即可实现既定功能
本地测试,为验证结果,请事先在hosts文件中配置如下
127.0.0.1 common.nepxion.com 127.0.0.1 env1.nepxion.com 127.0.0.1 env2.nepxion.com
以根据域名全链路环境隔离为例,根据域名前缀中的环境名路由到相应的全链路环境中
- 根据env1.nepxion.com域名路由到env1环境
- 根据common.nepxion.com域名路由到common环境
④ 基于RPC Method灰度蓝绿
通过取值RPC调用中的方法入参方式,即可实现既定功能
只适用于服务侧
增加新的灰度蓝绿表达式参数
① 支持Http Header、Http Query Parameter、Http Cookie三种参数。例如,下面表达式,a、b、c的值可以来自Http Header、Http Query Parameter、Http Cookie中的任何一种。为兼容老的用法,统一以header节点来描述
② 支持Http Header、Http Query Parameter、Http Cookie混合策略表达式,例如,下面表达式,a的值可以来自于Http Header,b的值可以来自于Http Query Parameter,c的值可以来自于Http Cookie。如果同一个值同时存在于Http Header、Http Query Parameter、Http Cookie,优先级Http Header > Http Query Parameter > Http Cookie
<condition id="condition2" header="#H['a'] == '1' && #H['b'] == '2' && #H['c'] == '3'" version-id="version-route1"/>
增加新的过滤器中自定义方式
① 过滤器中自定义基于Http Query Parameter灰度蓝绿环境隔离路由
② 过滤器中自定义基于Http Cookie灰度蓝绿环境隔离路由
③ 过滤器中自定义环境隔离路由策略
参考如下代码
`public class MyGatewayStrategyRouteFilter extends DefaultGatewayStrategyRouteFilter {
private static final Logger LOG = LoggerFactory.getLogger(MyGatewayStrategyRouteFilter.class);
private static final String DEFAULT_A_ROUTE_VERSION = "{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.1"}";
private static final String DEFAULT_B_ROUTE_VERSION = "{"discovery-guide-service-a":"1.1", "discovery-guide-service-b":"1.0"}";
private static final String DEFAULT_A_ROUTE_REGION = "{"discovery-guide-service-a":"dev", "discovery-guide-service-b":"qa"}";
private static final String DEFAULT_B_ROUTE_REGION = "{"discovery-guide-service-a":"qa", "discovery-guide-service-b":"dev"}";
private static final String DEFAULT_A_ROUTE_ADDRESS = "{"discovery-guide-service-a":"3001", "discovery-guide-service-b":"4002"}";
private static final String DEFAULT_B_ROUTE_ADDRESS = "{"discovery-guide-service-a":"3002", "discovery-guide-service-b":"4001"}";
@Value("${a.route.version:" + DEFAULT_A_ROUTE_VERSION + "}")
private String aRouteVersion;
@Value("${b.route.version:" + DEFAULT_B_ROUTE_VERSION + "}")
private String bRouteVersion;
@Value("${a.route.region:" + DEFAULT_A_ROUTE_REGION + "}")
private String aRouteRegion;
@Value("${b.route.region:" + DEFAULT_B_ROUTE_REGION + "}")
private String bRouteRegion;
@Value("${a.route.address:" + DEFAULT_A_ROUTE_ADDRESS + "}")
private String aRouteAddress;
@Value("${b.route.address:" + DEFAULT_B_ROUTE_ADDRESS + "}")
private String bRouteAddress;
// 自定义根据Header全链路版本匹配路由
@Override
public String getRouteVersion() {
String user = strategyContextHolder.getHeader("user");
LOG.info("自定义根据Header全链路版本匹配路由, Header user={}", user);
if (StringUtils.equals(user, "zhangsan")) {
LOG.info("执行全链路版本匹配路由={}", aRouteVersion);
return aRouteVersion;
} else if (StringUtils.equals(user, "lisi")) {
LOG.info("执行全链路版本匹配路由={}", bRouteVersion);
return bRouteVersion;
}
return super.getRouteVersion();
}
// 自定义根据Parameter全链路区域匹配路由
@Override
public String getRouteRegion() {
String user = strategyContextHolder.getParameter("user");
LOG.info("自定义根据Parameter全链路区域匹配路由, Parameter user={}", user);
if (StringUtils.equals(user, "zhangsan")) {
LOG.info("执行全链路区域匹配路由={}", aRouteRegion);
return aRouteRegion;
} else if (StringUtils.equals(user, "lisi")) {
LOG.info("执行全链路区域匹配路由={}", bRouteRegion);
return bRouteRegion;
}
return super.getRouteRegion();
}
// 自定义根据Cookie全链路IP地址和端口匹配路由
@Override
public String getRouteAddress() {
String user = strategyContextHolder.getCookie("user");
LOG.info("自定义根据Cookie全链路IP地址和端口匹配路由, Cookie user={}", user);
if (StringUtils.equals(user, "zhangsan")) {
LOG.info("执行全链路IP地址和端口匹配路由={}", aRouteAddress);
return aRouteAddress;
} else if (StringUtils.equals(user, "lisi")) {
LOG.info("执行全链路IP地址和端口匹配路由={}", bRouteAddress);
return bRouteAddress;
}
return super.getRouteEnvironment();
}
@Autowired
private GatewayStrategyContextHolder gatewayStrategyContextHolder;
// 自定义根据域名全链路环境隔离
@Override
public String getRouteEnvironment() {
String host = gatewayStrategyContextHolder.getURI().getHost();
if (host.contains("nepxion.com")) {
LOG.info("自定义根据域名全链路环境隔离, URL={}", host);
String environment = host.substring(0, host.indexOf("."));
LOG.info("执行全链路环境隔离={}", environment);
return environment;
}
return super.getRouteEnvironment();
}
}
`
服务侧功能增强
① 增加服务侧直接生效灰度蓝绿环境隔离路由策略,完全脱离网关而单独生效所有功能,即网关将不是全链路灰度蓝绿环境隔离路由的必要组件
② 支持基于内置Header的定时Job的服务调用灰度蓝绿
③ 修复服务侧未从内置Header获取条件Header的Bug
相关测试
自动化测试
① 增加自定义根据Http Header全链路版本匹配的测试用例
② 增加自定义根据Http Parameter全链路区域匹配的测试用例
③ 增加自定义根据Http Cookie全链路环境隔离的测试用例
④ 增加基于Http Header、Http Query Parameter、Http Cookie混合策略的测试用例
相关文档
Discovery【探索】微服务企业级解决方案
① Discovery【探索】微服务企业级解决方案文档
Discovery【探索】微服务企业级解决方案(PPT版) :
http://nepxion.gitee.io/docs/link-doc/discovery-ppt.html
Discovery【探索】微服务企业级解决方案(PDF版) :
http://nepxion.gitee.io/docs/link-doc/discovery-pdf.html
Discovery【探索】微服务企业级解决方案(HTML版) :
http://nepxion.gitee.io/docs/link-doc/discovery-html.html
② Discovery【探索】微服务企业级解决方案源码。请访问Gitee镜像获得最佳体验
源码Gitee同步镜像 :
https://gitee.com/Nepxion/Discovery
源码Github原镜像 :
https://github.com/Nepxion/Discovery
③ Discovery【探索】微服务企业级解决方案指南示例源码。请访问Gitee镜像获得最佳体验
指南Gitee同步镜像 :
https://gitee.com/Nepxion/DiscoveryGuide
指南Github原镜像 :
https://github.com/Nepxion/DiscoveryGuide
④ Discovery【探索】微服务框架指南示例说明
对于入门级玩家,参考 指南示例极简版 :
https://github.com/Nepxion/DiscoveryGuide/tree/simple
,分支为simple。涉及到指南篇里的灰度路由和发布的基本功能, 参考 新手快速入门 :https://gitee.com/nepxion/DiscoveryGuide/blob/simple/GUIDE.md
对于熟练级玩家,参考 指南示例精进版 :
https://github.com/Nepxion/DiscoveryGuide/tree/master
,分支为master。除上述《极简版》功能外,涉及到指南篇里的绝大多数高级功能对于骨灰级玩家,参考 指南示例高级版 :
https://github.com/Nepxion/DiscoveryGuide/tree/premium
,分支为premium。除上述《精进版》功能外,涉及到指南篇里的ActiveMQ、MongoDB、RabbitMQ、Redis、RocketMQ、MySQL等高级调用链和灰度调用链的整合
Polaris【北极星】企业级云原生微服务框架
① Polaris【北极星】企业级云原生微服务框架文档
Polaris【北极星】企业级云原生微服务框架(PDF版) :
http://nepxion.gitee.io/docs/link-doc/polaris-pdf.html
Polaris【北极星】企业级云原生微服务框架(HTML版) :
http://nepxion.gitee.io/docs/link-doc/polaris-html.html
② Polaris【北极星】企业级云原生微服务框架源码。请访问Gitee镜像获得最佳体验
源码Gitee同步镜像 :
https://gitee.com/polaris-paas/polaris-sdk
源码Github原镜像 :
https://github.com/polaris-paas/polaris-sdk
③ Polaris【北极星】企业级云原生微服务框架指南示例源码。请访问Gitee镜像获得最佳体验
指南Gitee同步镜像 :
https://gitee.com/polaris-paas/polaris-guide
指南Github原镜像 :
https://github.com/polaris-paas/polaris-guide
请联系我
微信、公众号和文档
本文分享自微信公众号 - Nepxion开源社区(iMicroService)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。