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