该文章内容发布已经超过一年,请注意检查文章中内容是否过时。

Dubbo Java 3.0.2 发版公告

Apache Dubbo 3.0.2 发版公告

新特性

  • 支持通过 @DubboService 注解暴露泛化服务
  • 元数据中心xml格式的配置支持 protocol 和 port 属性
  • 兼容 curator5 以上的版本
  • 点对点调用支持*通配符进行匹配, 一个提供者地址可对应多个接口
  • 为应用级别的服务发现增加动态配置去进行规则覆盖
  • 对提供者测的动态配置覆盖规则提供开关,可以使提供者无视动态配置,不重新暴露
  • 支持 native image
  • 提供取消执行 shutdown hook 的开关
  • 支持 Kubernetes Mesh 的服务治理规则
  • Netty 连接支持 SSL 配置

Bug 修复

  • DubboBootStrap start 重复调用后,动态配置被覆盖
  • 动态配置规则被删除后,依然生效
  • triple 协议在暴露时会抛出空指针异常
  • ConfigCenterConfig.setAddress 方法会覆盖掉 username 属性
  • DefaultFuture.closeChannel 会销毁掉消费端测的线程池
  • TripleClientHandler.writeRequest 抛出空指针异常
  • 解析3.0迁移规则异常时会抛出空指针异常
  • Activated Extensions 的顺序性问题
  • URLAddress.parse 方法在解析 ipv6 地址时存在问题
  • 用户自定义的参数在 properties 配置中不生效
  • 同时使用 API 模式和 Spring 模式配置时属性,Config Id 存在覆盖问题
  • 应用级别服务发现在启动时不生效
  • Nacos 注册中心无法动态感知提供者的数量变化
  • ${dubbo.application} 在 xml 文件中无法被 spring 的 placeholder 规则给解析替换
  • 获取实例参数的顺序问题,先去获取了实例级别参数,再去获取接口级别参数
  • 当 DubboConfigBeanInitializer 不存在时,注册应用启动监听器会抛出异常
  • Mock 时 参数中包含 ‘:’ 或者 ‘=’ 字符时,不生效
  • 删除 Mesh 规则时空指针异常

优化

  • 抓住 RemovalTask 的异常,保证信号量能够释放
  • 通过 唯一 service name 检查 ReferenceConfig/ServiceConfig 是否重复
  • 优化生成随机数的性能
  • 如果用户使用接口级别去做服务发现,不发布应用与接口的映射数据到元数据中心
  • 使用 StringBuilder#append(Char) 提升性能
  • 保证 GRPC 编译的类文件中接口的顺序
  • 优化 reference bean 的占位符解析
  • MergeableClusterInvoker 中使用 CompletableFuture#get(long, TimeUnit) 去提升性能
  • 内置服务 MetadataService 不延迟暴露
  • 优化 ConfigBean 和 Bootstrap 的启动逻辑
  • 优化 Config 检查是否重复的逻辑
  • 使用 Ring 数据结构去进行注册通知
  • 优化动态配置的初始化逻辑
  • ConfigManager 使用 ConcurrentHashMap 去移除锁逻辑,提升 equals 和 toString 性能
  • 优化 MetadataInfo equals 方法 以及 Instance Listener
  • 优化异步 export/refer 逻辑
  • 使用 TreeSet 数据结构保证应用级别服务发现时应用名称的顺序一致
  • RegistryNotifier 的第一个十次通知不延迟
  • dubbo-compile 编译使用新的格式生成 stub
  • Mesh 服务治理规则在动态配置中心的分组和其他规则分组统一,由 DEFAULT_GROUP 改成 dubbo
  • 使用 nacos 用作注册中心时,可以在注册中心地址中使用参数来改变在 nacos 中的分组
  • 计算 ServiceInfo 的 reversion 时,移除运行时参数,避免生成多个 reversion
  • Nacos 注册中心抛出异常时,将异常封装称 RpcException 抛出
  • 禁止动态配置中心对一些权限参数进行动态修改
  • 优化 Config Bean 的初始化流程,并兼容 spring 3.x/4.1.x
  • Bootstrap.start 方法可重入,暴露或引用新的服务
  • 将 org.apache.dubbo 包中的类默认添加到白名单中
  • 保证生成的 Config 的 Id 唯一,并检查 Config 是否之前存在
  • Javaassist 兼容改变 override 声明字段
  • 重构解码时的检查逻辑,当找不到 path, version 对应的提供者是,抛出异常
  • 当 ApplicationModel 为 null 时,兼容 adaptive extensions

代码质量提升

感谢以下提高 Apache Dubbo 的稳定性的贡献。

#8111, #8147, #8164, #8177, #8180, #8161, #8183, #8205, #8173, #8219, #8228, #8232, #8230, #8236, #8260, #8262, #8252, #8246, #8208, #8278, #8267, #8277, #8291, #8296, #8302, #8175, #8319, #8309, #8336, #8332, #8328, #8355, #8396, #8401, #8395, #8415, #8406, #8411, #8418, #8439, #8404, #8443

Maven依赖变化

  • 移除依赖: org.eclipse.collections:eclipse-collections
  • 移除依赖: com.google.guava:guava
  • jetty: 9.4.11.v20180605 -> 9.4.43.v20210629
  • apollo client: 1.1.1 -> 1.8.0
  • snakeyaml: 1.20 -> 1.29
  • tomcat embed: 8.5.31 -> 8.5.69
  • nacos client: 2.0.0 -> 2.0.2
  • swagger: 1.5.19 -> 1.5.24
  • hessian_lite: 3.2.8 -> 3.2.11