Skip to content

6.10.0(APR 26, 2021)

Compare
Choose a tag to compare
@HaojunRen HaojunRen released this 25 Apr 19:29
· 1063 commits to 6.x.x since this release

贡献列表

  • 感谢@zifenhan的贡献
  • 感谢@pegasus的贡献
  • 感谢@zhongxun的贡献
  • 感谢@霁华的测试验证

发布日志

发布策略

提醒:版本号右边, 表示>=该版本号, 表示<=该版本号

版本 状态 SC SB SCA
7.0.0 (商业版) 202x.x.x 2.4.1 ↑ 202x.x
6.10.0 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.26.0 E 1.5.x 1.5.x
2.0.x D 1.x.x 1.5.x
1.0.x C 1.x.x 1.5.x

表示维护中 | 表示不维护,但可用,强烈建议升级 | 表示不维护,不可用,已废弃

  • 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获取最新版本