Releases: Nepxion/Discovery
Releases · Nepxion/Discovery
5.4.2(OCT 18, 2019)
Nepxion Discovery 5.4.2 发布
发布日志
版本更新:
- 升级Spring Boot到2.1.9.RELEASE
服务端更新:
- 增加服务本身的权重路由
- 修复叠加执行权重规则和版本区域策略会失效的Bug
- 修复DiscoveryEnabledStrategy中apply方法执行两次的Bug
- 优化主Pom结构
- 优化FeignStrategyInterceptorAdapter和RestTemplateStrategyInterceptorAdapter
- 优化FeignStrategyInterceptor和RestTemplateStrategyInterceptor拦截Header输出的顺序
- 优化Sentinel模块
- 优化随机权重时候,权重配置全部为0的情况下,抛出的异常信息
- 勘误discovery-plugin-strategy-sentinel的additional-spring-configuration-metadata.json下相关path的defaultValue值
- 统一用户自定义的类名规范,统一以Default为类名开头,例如:DefaultDiscoveryEnabledStrategy,DefaultGatewayStrategyRouteFilter,DefaultGatewayStrategyTracer
- 重构和优化类结构
- 重构内部静态变量名
- 精简日志输出
网关端更新:
- 修正前端传递Header实现灰度路由失效的Bug
- 重构和优化类结构
分支更新:
- Edgware分支改名为3.x.x
- Finchley分支改名为4.x.x
示例更新:
- 增加FeignStrategyInterceptorAdapter和RestTemplateStrategyInterceptorAdapter的使用示例
- 增加DiscoveryEnabledStrategy的实现类中,IP地址和端口的打印
- 增加根据RPC调用传来的方法参数(例如接口名、方法名、参数名或参数值等),选取执行调用请求的服务实例
- 增加控制台示例
不兼容项:
- AbstractServiceSentinelRequestOriginAdapter改名为DefaultServiceSentinelRequestOriginAdapter
源码主页
https://github.com/Nepxion/Discovery
指南主页
https://github.com/Nepxion/DiscoveryGuide
文档主页
https://gitee.com/Nepxion/Docs/tree/master/web-doc
其它版本
同时发布的版本,还包括:
- Nepxion Discovery 4.12.2,支持Finchley版
- Nepxion Discovery 3.12.2,支持Edgware版
4.12.2(OCT 18, 2019)
见 Nepxion Discovery 5.4.2 发布
3.12.2(OCT 18, 2019)
见 Nepxion Discovery 5.4.2 发布
5.4.0(SEP 28, 2019)
Nepxion Discovery 5.4.0 发布
发布日志
版本更新:
- 升级Spring Cloud到Greenwich.SR3,确定对Spring Cloud Hoxton版的支持计划
- 升级Spring Boot版本到2.1.8.RELEASE,并解决spring-web-5.1.9.RELEASE和5.1.8.RELEASE中header设置和传递的不兼容问题(Spring也玩不兼容)
服务端更新:
增加Alibaba Sentinel和灰度路由的有机整合,包括:
- 封装远程配置中心和本地规则文件的读取逻辑,即优先读取远程配置,如果不存在或者规则错误,则读取本地规则文件。动态实现远程配置中心对于规则的热刷新
- 封装NacosDataSource和ApolloDataSource,支持Nacos和Apollo两个远程配置中心,零代码实现Sentinel功能。更多的远程配置中心,请参照Sentinel官方的DataSource并自行集成,参考discovery-plugin-strategy-sentinel-starter-nacos下2个类和spring.factories
- 支持原生的流控规则、降级规则、授权规则、系统规则、热点参数流控规则
- 支持扩展LimitApp的机制,通过动态的Http Header方式实现组合式防护机制,包括基于服务名、基于灰度组、基于灰度版本、基于灰度区域、基于机器地址和端口等防护机制,支持自定义任意的业务参数组合实现该功能,例如,根据传入的微服务灰度版本号+用户名,组合在一起进行熔断
- 支持微服务侧Actuator、Swagger和Rest三种方式的规则写入
- 支持控制台侧基于微服务名的Actuator、Swagger和Rest三种方式的批量规则写入
- 支持下面开关关闭上述功能
spring.application.strategy.sentinel.enabled=true
- 增加Sentinel和Hystrix的Banner输出
网关端更新:
- 去除GatewayStrategyFilter,合并到AbstractGatewayStrategyRouteFilter,此改动修复了Finchley版灰度路由时的上下文丢失的重大Bug
- AbstractGatewayStrategyRouteFilter和AbstractZuulStrategyRouteFilter,增加extendFilter的方法,可以被业务层覆盖,可减少一层Filter
- 增加GatewayStrategyClearFilter,用以清除GatewayStrategyContext的ThreadLocal对象
- 去除多余的配置
spring.application.strategy.gateway.route.filter.enabled=true
spring.application.strategy.zuul.route.filter.enabled=true
负载均衡更新:
- 增加微服务侧和网关侧,负载均衡下,消费端尝试获取对应提供端初始服务实例列表为空的时候,进行重试的功能,参考下列配置:
# 负载均衡下,消费端尝试获取对应提供端初始服务实例列表为空的时候,进行重试。缺失则默认为false
# spring.application.no.servers.retry.enabled=false
# 负载均衡下,消费端尝试获取对应提供端初始服务实例列表为空的时候,进行重试的次数。缺失则默认为5
# spring.application.no.servers.retry.times=5
# 负载均衡下,消费端尝试获取对应提供端初始服务实例列表为空的时候,进行重试的时间间隔。缺失则默认为2000
# spring.application.no.servers.retry.await.time=2000
# 负载均衡下,消费端尝试获取对应提供端服务实例列表为空的时候,通过日志方式通知。缺失则默认为false
# spring.application.no.servers.notify.enabled=false
配置更新:
- 增加Nacos properties获取方式,整合Sentinel NacosDataSource和灰度配置,两个配置实现共享
- 增强Apllo namespace获取方式,整合Sentinel ApolloDataSource和灰度配置,先从apollo.bootstrap.namespaces方式获取,如果不存在则通过apollo.plugin.namespace获取,如果不存在,默认赋予application值
- 外部元数据设置方式从-Dext.abc变更为-Dmetadata.abc,更易理解
外部接口更新:
- 增加微服务侧和控制台侧灰度版本动态修改的权限控制
测试更新:
- 去除自动化测试中的配置,因为基于Group推送规则到服务无法和推送到远程配置中心兼容,新版本中只保留基于后者的自动化测试方式
# 测试用例的配置内容推送到远程配置中心,还是到服务。缺失则默认为true
spring.application.test.configcenter.enabled=true
功能更新:
- 优化灰度发布本地规则文件的读取逻辑
示例更新:
- 极简示例的由DiscoveryGray更名为DiscoveryGuide,请访问https://github.com/Nepxion/DiscoveryGuide
- 优化文档和示例
感谢:
- 感谢@WeihuaWang同学贡献Sentinel相关代码
源码主页
https://github.com/Nepxion/Discovery
指南主页
https://github.com/Nepxion/DiscoveryGuide
文档主页
https://gitee.com/Nepxion/Docs/tree/master/web-doc
其它版本
同时发布的版本,还包括:
- Nepxion Discovery 4.12.0,支持Finchley版
- Nepxion Discovery 3.12.0,支持Edgware版
4.12.0(SEP 28, 2019)
见 Nepxion Discovery 5.4.0 发布
3.12.0(SEP 28, 2019)
见 Nepxion Discovery 5.4.0 发布
5.3.9(AUG 28, 2019)
Nepxion Discovery 5.3.9 发布
- 修复兼容未带有Discovery版本的原生服务的负载均衡
- 以前版本只在网关端支持CustomizationStrategyRouteFilter,现在在服务端也能支持。变更方式CustomizationGatewayStrategyRouteFilter和CustomizationZuulStrategyRouteFilter抽象到框架层,下面的代码不需要加在业务代码中
@Bean
@ConditionalOnProperty(value = GatewayStrategyConstant.SPRING_APPLICATION_STRATEGY_GATEWAY_ROUTE_FILTER_ENABLED, matchIfMissing = true)
public GatewayStrategyRouteFilter gatewayStrategyRouteFilter() {
return new MyGatewayStrategyRouteFilter();
}
@Bean
@ConditionalOnProperty(value = ZuulStrategyConstant.SPRING_APPLICATION_STRATEGY_ZUUL_ROUTE_FILTER_ENABLED, matchIfMissing = true)
public ZuulStrategyRouteFilter zuulStrategyRouteFilter() {
return new MyZuulStrategyRouteFilter();
}
- 修正未引入discovery-plugin-strategy-starter-xxx包(事实上,强烈建议引入该类的包),出现spring.application.type为空的Bug。如果未引入,则该值默认处理未unknown
- 修正未引入discovery-plugin-strategy-starter-xxx包(事实上,强烈建议引入该类的包),出现pluginContextHolder未空的Bug
- 增加模拟压力传输指定容量的字符串的工具类,对于性能压力测试比较有用,使用方式
StringUtil.simulateText(1024),将产生1K大小的字符串
- 增加自动化测试功能,支持普通调用和灰度调用的自动化测试
- 增加pluginAdapter.getPluginInfo方法,用于判断灰度发布和路由的准确性校验
- 增加默认的空规则在DiscoveryConstant里
- 优化增加内置配置文件的功能
- 修复全链路随机权重的Bug
- 修复路由接口的权重设置Bug
- 增加additional-spring-configuration-metadata.json,支持IDE自动弹出和补全配置
- 修复变量命名和拼写错误
- 修订不正确的配置注释
- 修订和优化用户文档
4.11.9(AUG 28, 2019)
见 Nepxion Discovery 5.3.9 发布
3.11.9(AUG 28, 2019)
见 Nepxion Discovery 5.3.9 发布
5.3.3(AUG 12, 2019)
Nepxion Discovery 5.3.3 发布
- 优化传递Header的性能,只有开启调用链模式,才会传递必要的Header
- 增加灰度调用链的MDC日志输出机制
- 修改线程切换上下文丢失或者在过滤器设置ThreadLocal之前执行获取上线文的错误提示
- 增加配置参数
# 用户自定义和编程灰度路由策略的时候,对REST方式调用拦截的时候(支持Feign或者RestTemplate调用),希望把来自外部自定义的Header参数(用于框架内置上下文Header,例如:traceid, spanid等)传递到服务里,那么配置如下值。如果多个用“;”分隔,不允许出现空格
# spring.application.strategy.context.request.headers=traceid;spanid
- 更改配置参数
为了区分框架内置上下文Header的配置
# 用户自定义和编程灰度路由策略的时候,对REST方式调用拦截的时候(支持Feign或者RestTemplate调用),希望把来自外部自定义的Header参数(用于业务系统子定义Header,例如:mobile)传递到服务里,那么配置如下值。如果多个用“;”分隔,不允许出现空格
spring.application.strategy.request.headers=mobile
更改为
# 用户自定义和编程灰度路由策略的时候,对REST方式调用拦截的时候(支持Feign或者RestTemplate调用),希望把来自外部自定义的Header参数(用于业务系统子定义Header,例如:mobile)传递到服务里,那么配置如下值。如果多个用“;”分隔,不允许出现空格
spring.application.strategy.business.request.headers=mobile
- 增加DiscoveryGray极简示例的MDC日志使用方式
- 增加内置配置文件的功能。参考如下配置
# 业务系统希望大多数时候Spring、SpringBoot或者SpringCloud的基本配置、调优参数(非业务系统配置参数),不配置在业务端,集成到基础框架里。但特殊情况下,业务系统有时候也希望能把基础框架里配置的参数给覆盖掉,用他们自己的配置
# 对于此类型的配置需求,可以配置在下面的配置文件里。该文件一般放在resource目录下。缺失则默认为spring-application-default.properties
# spring.application.default.properties.path=spring-application-default.properties
- 增加Spring Boot容器为Servlet容器还是Reactive容器的判断逻辑
- 修正AnnotationConfigEmbeddedWebApplicationContext的判断逻辑
- 移动postman脚本路径