Skip to content

6.3.1(OCT 6, 2020)

Compare
Choose a tag to compare
@HaojunRen HaojunRen released this 06 Oct 03:39

发布日志

  • 本次发布版本,深入和Spring Cloud AlibabaNacos团队进行探讨、合作、测试,并结合若干家公司的落地实践,进行优化和重构,以更强大的功能,解决使用者的真正痛点,以更开放的方式,供使用者灵活扩展
  • 欢迎使用Nepxion Polaris集成式脚手架,极大降低Nepxion Discovery接入成本,请访问 Polaris【北极星】企业级云原生微服务框架 :https://github.com/Nepxion/Polaris

发布策略

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

提醒:Spring Boot版本和Spring Cloud Alibaba版本需要在版本号后面加上.RELEASE

版本 状态 SC版本 SB版本 SCA版本
6.3.1 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.1 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)已废弃

重大变更

为未来更健康的持续性演进框架,使框架结构更趋合理,并在阅读性上更良好,本版本做了如下变更

① 框架结构变更

  • 平行结构改造成树状结构

② 依赖引入变更

  • Sentinel插件依赖引入变更
<dependency>
    <groupId>com.nepxion</groupId>
    <!-- 旧的 -->
    <artifactId>discovery-plugin-strategy-sentinel-starter-opentracing</artifactId>
    <!-- 新的 -->
    <artifactId>discovery-plugin-strategy-starter-sentinel-opentracing</artifactId>
</dependency>
<dependency>
    <groupId>com.nepxion</groupId>
    <!-- 旧的 -->
    <artifactId>discovery-plugin-strategy-sentinel-starter-skywalking</artifactId>
    <!-- 新的 -->	
    <artifactId>discovery-plugin-strategy-starter-sentinel-skywalking</artifactId>
</dependency>
<dependency>
    <groupId>com.nepxion</groupId>
    <!-- 旧的 -->
    <artifactId>discovery-plugin-strategy-sentinel-starter-nacos</artifactId>
    <!-- <artifactId>discovery-plugin-strategy-sentinel-starter-apollo</artifactId> -->
    <!-- <artifactId>discovery-plugin-strategy-sentinel-starter-local</artifactId> -->
    <!-- 新的 -->
    <artifactId>discovery-plugin-strategy-starter-sentinel-nacos</artifactId>
    <!-- <artifactId>discovery-plugin-strategy-starter-sentinel-apollo</artifactId> -->
    <!-- <artifactId>discovery-plugin-strategy-starter-sentinel-local</artifactId> -->
</dependency>
  • 自动化测试插件依赖引入变更
<dependency>
    <groupId>com.nepxion</groupId>
    <!-- 旧的 -->
    <artifactId>discovery-plugin-test-starter</artifactId>
    <!-- 新的 -->
    <artifactId>discovery-plugin-test-starter-automation</artifactId>
</dependency>
  • 自动化测试包名变更
<!-- 旧的 -->
com.nepxion.discovery.plugin.test
<!-- 新的 -->
com.nepxion.discovery.plugin.test.automation

③ 第三方版本变更

  • 升级Swagger到2.9.2

缺陷修复

修复异步调用链丢失的缺陷

  • 修复@async异步调用埋点Span输出到Skywalking的缺陷

修复异步调用链日志的缺陷

  • 修复日志频繁打印的缺陷

功能迭代

支持Nacos动态元数据

  • 支持未来Nacos 1.4.0的动态元数据批量修改、删除、复原功能

支持异步Agent扩展

该扩展支持一切Java异步场景,不限于任何Java技术栈和框架

涵盖所有Java框架的异步场景,解决如下6个异步场景下丢失线程上下文的问题

  • @Async

  • Hytrix Thread Pool Isolation

  • Runnable

  • Callable

  • Single Thread

  • Thread Pool

  • 根据规范开发一个插件,插件提供了钩子函数,在某个类被加载的时候,可以注册一个事件到线程上下文切换事件当中,实现业务自定义ThreadLocal的跨线程传递。参考:discovery-plugin-strategy-starter-agent-plugin模块的com.nepxion.discovery.plugin.strategy.starter.agent.plugin.service下的实现方式

  • plugin目录为放置需要在线程切换时进行ThreadLocal传递的自定义插件。业务自定义插件开发完后,放入到plugin目录下即可

具体步骤介绍,如下

  • 新建一个模块,引入如下依赖
<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>discovery-plugin-strategy-starter-agent</artifactId>
    <scope>provided</scope>
</dependency>
  • 新建一个ThreadLocalHook类继承AbstractThreadLocalHook,参考GatewayStrategyContextHook
public class GatewayStrategyContextHook extends AbstractThreadLocalHook {
    @Override
    public Object create() {
        // 从主线程的ThreadLocal里获取并返回上下文对象 
        return GatewayStrategyContext.getCurrentContext().getExchange();
    }

    @Override
    public void before(Object object) {
        // 把create方法里获取到的上下文对象放置到子线程的ThreadLocal里
        if (object instanceof ServerWebExchange) {
            GatewayStrategyContext.getCurrentContext().setExchange((ServerWebExchange) object);
        }
    }

    @Override
    public void after() {
        // 线程结束,销毁上下文对象
        GatewayStrategyContext.clearCurrentContext();
    }
}
  • 新建一个Plugin类继承AbstractPlugin,参考DiscoveryGatewayPlugin
public class DiscoveryGatewayPlugin extends AbstractPlugin {
    @Override
    protected String getMatcherClassName() {
        // 返回存储ThreadLocal对象的类名,由于插件是可以插拔的,所以必须是字符串形式,不允许是显式引入类
        return "com.nepxion.discovery.plugin.strategy.gateway.context.GatewayStrategyContext";
    }

    @Override
    protected String getHookClassName() {
        // 返回ThreadLocalHook类名
        return GatewayStrategyContextHook.class.getName();
    }
}
  • 定义SPI扩展,在src/main/resources/META-INF/services目录下定义SPI文件

名称为固定如下格式

com.nepxion.discovery.plugin.strategy.agent.plugin.Plugin

内容为Plugin类的全路径(以DiscoveryGatewayPlugin为例)

com.nepxion.discovery.plugin.strategy.agent.plugin.gateway.DiscoveryGatewayPlugin
  • 上述自定义插件的方式,即可解决使用者在线程切换时丢失ThreadLocal上下文的问题

支持反向去除核心依赖

  • 支持使用者反向去除管理中心模块的依赖

相关测试

自动化测试

  • 增加Nacos 1.4.0 Open API批量修改动态元数据自动化测试用例
  • 增加Nacos 1.4.0 Open API批量删除动态元数据自动化测试用例
  • 增加Nacos 1.4.0 Open API批量复原动态元数据自动化测试用例

相关下载

DiscoveryAgent下载

访问https://github.com/Nepxion/DiscoveryAgent/releases获取最新版本

DiscoveryDesktop下载

访问https://github.com/Nepxion/DiscoveryUI/releases获取最新版本