该文章内容发布已经超过一年,请注意检查文章中内容是否过时。
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
 
