6.10.0(APR 26, 2021)
贡献列表
发布日志
发布策略
提醒:版本号右边, ↑
表示>=该版本号, ↓
表示<=该版本号
表示维护中 | 表示不维护,但可用,强烈建议升级 | 表示不维护,不可用,已废弃
- 7.x.x版本(适用于202x.x.x)将继续维护
- 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)已废弃
版本变更
- 默认集成Spring Boot版本为2.3.10.RELEASE(
可降级
) - 默认集成Spring Cloud版本为Hoxton.SR11(
可降级
) - 默认集成SkyWalking版本为8.5.0
- 升级EventBus版本为2.0.15
- 升级Matrix版本为2.0.9
功能迭代
自动扫描目录
自动扫描目录功能为省掉手工配置扫描目录而设定的,当使用者手工配置了扫描目录,则采用使用者配置的目录,如果没配置,则采用自动扫描目录的方式。感谢@zhongxun提供的相关解决方案和代码
如下配置是手工配置扫描目录的样例
# 路由策略的时候,需要指定对业务RestController类的扫描路径。此项配置作用于RPC方式的调用拦截、消费端的服务隔离和调用链三项功能
spring.application.strategy.scan.packages=com.nepxion.discovery.guide.service
① 自动扫描目录的配置
# 启动和关闭自动扫描目录,当扫描目录未人工配置的时候,可以通过自动扫描方式决定扫描目录。缺失则默认为true
spring.application.strategy.auto.scan.packages.enabled=true
# 启动和关闭嵌套扫描,嵌套扫描指扫描非本工程下外部包的目录,可以支持多层嵌套。缺失则默认为false
spring.application.strategy.auto.scan.recursion.enabled=false
② 自动扫描目录的逻辑
在假设的场景中,SpringBoot入口设定扫描目录为com.a,com.a目录下有个Spring对象通过ComponentScan方式设定扫描目录为com.b,com.b目录下有个Spring对象通过ComponentScan方式设定扫描目录为com.c,那么最终计算出来的目录为
嵌套扫描下,得到的扫描目录是
SpringBoot入口所在的目录;com.a;com.b;com.c
非嵌套扫描下,得到的扫描目录是
SpringBoot入口所在的目录;com.a
③ 扩展获取自动扫描目录
使用者可以通过如下代码得到自动扫描目录
public class MyService {
@Autowired
private StrategyPackagesExtractor strategyPackagesExtractor;
public void getPackages() {
// 获取@SpringBootApplication所在类入口的扫描目录(一般只有一个),返回List<String>类型
strategyPackagesExtractor.getBasePackagesList();
// 获取所有嵌套的扫描目录(包括当前工程的所有类中@SpringBootApplication和@ComponentScan注解设定的扫描目录),返回List<String>类型
strategyPackagesExtractor.getScanningPackagesList();
// 上面两种目录的相加,返回List<String>类型
strategyPackagesExtractor.getAllPackagesList();
}
}
解决本框架和Eureka注册中心原生可用区亲和性功能的冲突
如果采用Eureka注册中心,Ribbon本身就具有可用区亲和性功能,跟本框架类似。通过如下开关,来选择使用Eureka原生的功能(只有亲和性隔离,没有亲和性路由),还是本框架的功能
# 启动和关闭Eureka原生的可用区亲和性。当采用的注册中心是Eureka,并希望使用本框架的可用区亲和性功能,需要关闭Eureka原生的可用区亲和性功能,因为两者是冲突的
niws.loadbalancer.zoneAvoidanceRule.enabled=false
精简优化日志输出
① 精简Matrix Aop日志输出
② 优化Feign、RestTemplate和WebClient日志输出
缺陷修复
修复SkyWalking在WebFlux下TraceId不一致的缺陷
由于SkyWalking的缺陷,apm-toolkit-trace不支持异步获取TraceId,Nepxion Discovery通过在过滤器增强方式,修复SkyWalking在全链路Spring Cloud Gateway下TraceId和服务侧TraceId不一致的缺陷。感谢@zifenhan提供的相关解决方案和代码
使用者可以通过如下代码示例,在Spring Cloud Gateway的过滤器中获取TraceId
public class MyGatewayFilter implements GlobalFilter, Ordered {
private static final Logger LOG = LoggerFactory.getLogger(MyGatewayFilter.class);
@Autowired
private StrategyMonitorContext strategyMonitorContext;
@Override
public int getOrder() {
return 10000;
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
LOG.info("获取TraceId={}, SpanId={}", strategyMonitorContext.getTraceId(), strategyMonitorContext.getSpanId());
return chain.filter(exchange);
}
}
需要注意,虽然在SDK侧能保证全链路TraceId的一致性和唯一性,但SkyWalking仍旧不支持基于WebFlux的手工埋点,即SkyWalking界面上依旧看不到Nepxion蓝绿灰度埋点
修复订阅组件释放资源的缺陷
修复ZooKeeper和Redis取消订阅时,未释放资源的缺陷。感谢@pegasus的PR
相关发布
DiscoveryAgent发布
DiscoveryAgent发布1.0.3版
功能迭代
- 简化Agent启动命令行
对于如下示例的启动命令行
-javaagent:C:/opt/discovery-agent/discovery-agent-starter-${discovery.agent.version}.jar -Dthread.scan.packages=reactor.core.publisher;org.springframework.aop.interceptor;com.netflix.hystrix;com.nepxion.discovery.guide.service.feign
如下基准扫描目录将不需要配置,通过内置到agent.config中,实现智能扫描。使用者可以增加和删除agent.config的基准扫描目录
reactor.core.publisher;org.springframework.aop.interceptor;com.netflix.hystrix
如下扫描目录仍需要配置,属于业务服务自身的扫描目录
com.nepxion.discovery.guide.service.feign
启动命令行为
-javaagent:C:/opt/discovery-agent/discovery-agent-starter-${discovery.agent.version}.jar -Dthread.scan.packages=com.nepxion.discovery.guide.service.feign
如果业务服务自身的扫描目录下没有Runnable/Callable/Thread/ThreadPool等异步类存在,那么thread.scan.packages也不需要配置,最终启动命令行简化为
-javaagent:C:/opt/discovery-agent/discovery-agent-starter-${discovery.agent.version}.jar
感谢@zifenhan贡献的PR
DiscoveryDesktop发布
DiscoveryDesktop发布1.0.3版
相关下载
DiscoveryAgent下载
访问https://github.com/Nepxion/DiscoveryAgent/releases
获取最新版本
DiscoveryDesktop下载
访问https://github.com/Nepxion/DiscoveryUI/releases
获取最新版本