dubbo当前版本 2.7.3 期望升级到 3.0.11。

升级过程

maven依赖变更
		<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.0.11</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.0.11</version>
</dependency>
dubbo2 升级到dubbo3兼容性配置

服务端

dubbo.application.register-mode 服务端提供者服务的注册模式 可选值有

  • instance 只注册实例应用级
  • all 接口级+应用级均注册
  • interface 只注册接口级

升级到3.x之后在不修改配置的情况下默认是 all配置 开启接口级+应用级注册

消费端/客户端

服务有注册模式 那么消费端肯定也有服务订阅发现模式设置

dubbo.application.service-discovery.migration 消费端订阅模式可选值有

  • APPLICATION_FIRST 双订阅 即接口模式/应用级模式 智能决策 一般用于2.7.x与3.x 升级中 共存阶段 也是3.x版本默认的订阅模式
  • FORCE_APPLICATION 仅应用级订阅模式
  • FORCE_INTERFACE 仅接口级订阅模式

关于兼容这一步如果项目升级的时候没有用户使用 不做兼容性升级也没问题,这里主要是介绍保障逐步把2.7.x版本升级到3.x 而不是全部停机后重新部署。

红色虚线框部分是3.x版本的部分升级后实例,左边是原始的2.7.x版本实例。大概操作流程如下

1、逐步把部分Provider替换为3.x 服务端注册模式为all应用级+接口级,这样2.7.x的消费端也能够根据接口服务发现

2、逐步把部分Consumer替换为3.x 消费订阅模式为APPLICATION_FIRST 双订阅模式

3、观察3.x版本 服务端与消费端情况,如果异常就回滚到2.7.x。没啥问题的话就可以逐步全部切换到3.x版本

4、到了这一步说明当前所有实例均为3.x版本,下次再更新的时候就把服务端注册模式设置为instance ,消费端订阅模式设置为 FORCE_APPLICATION 就完美切换到3.x版本 并且是应用级服务发现。

踩坑问题

3.0.11其实也没有太多问题 好多问题都在之前版本就修复了,主要就是由于自身项目编码问题导致进了一个坑

由于原来项目编码不是很规范,在本地服务的接口中用到@Autowired、本服务内部调用有的又用到了 @DubboReference 这种情况启动的时候就会报错,在2.7.x却不报错。这是因为3.x把Reference的bean代理也注入到spring容器中去了。本身的@DubboService Bean也会注册到Spring容器中去。就会导致出现2个类型一样的springBean,导致使用Autowired,由于属性name不规范的时候就会报错。

Field demoService in org.apache.dubbo.springboot.demo.provider.DemoService2 required a single bean, but 2 were found:
- demoServiceImpl: defined in file [D:\opensource\dubbo-samples\1-basic\dubbo-samples-spring-boot\dubbo-samples-spring-boot-provider\target\classes\org\apache\dubbo\springboot\demo\provider\DemoServiceImpl.class]
- demoServiceRemote: defined in null

3.x主要新特性

  1. 服务注册与发现改版 由接口级别改为应用级
  2. 云原生更好的支持 如native image,dubbo proxyless Mesh,
  3. 可视化的dubbo-admin服务治理能力
  4. 全新通信协议Triple 让跨语言RPC迈了一大步,支持点对点调用、stream 流式调用。写proto IDL 文件可生成各类客户端代码,完全兼容grpc 让javago`成为后端深度合作伙伴

3.x小版本更新

3.0.x升级到3.1.x

变动不大就只是针对nacos的group进行了对齐。如果配置中填写的nacos的地址带了group参数的话 ,需要客户端和服务端保持一致的group。

当然也可以强制去掉group分组隔离功能 dubbo.nacos-service-discovery.use-default-group=false 全局属性值忽略该功能

3.1.x升级到3.2.x

最大的变更是默认序列化的变了,dubbo协议默认序列化由hessian2变更为 fastjson2,原因就是fastjson2性能更高也能兼容hessian2 也支持jdk17 和Native 。

triple协议支持自定义异常回传。

dubbo2升级到dubbo3实践的更多相关文章

  1. Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(序章)

    Dubbo的背景介绍 Apache Dubbo 是一款微服务开发框架(是一款高性能.轻量级的开源 Java 服务框架),它提供了 RPC通信 与 微服务治理 两大关键能力.这意味着,使用 Dubbo ...

  2. - 反编译 AndroidKiller 逆向 实践案例 MD

    目录 目录 反编译 AndroidKiller 逆向 实践案例 MD AndroidKiller 简介 插件升级 基本使用 实践案例 修改清单文件 打印 debug 级别的日志 方式一:直接代理 Lo ...

  3. 14. ClustrixDB 高可用性的最佳实践

    本文档详细介绍了最大化ClustrixDB上运行的应用程序正常运行时间的最佳实践.这涵盖了广泛的主题,从环境需求到变更管理程序,所有这些最终都会影响应用程序的可用性.其中许多是您可能已经熟悉的标准最佳 ...

  4. 国产PLM软件在创新实践中强势崛起

    近日,"璞华PLM"先后获得微度医疗.埃特斯等多个客户的订单,即使在疫情环境下也展现出了强劲的高速增长.在产品生命周期管理(PLM,Product Lifecycle Manage ...

  5. Wyn BI的机会在哪里:越靠近消费者的行业,比如零售、文娱和金融,信息化投入越大 ZT

    近日,全球知名信息技术咨询公司IDC在网易云创大会上发布了<2018中国企业数字化发展报告>(下称报告).报告显示,近几年我国数字经济占GDP比重逐年增加,至2017年已经达到32.9%, ...

  6. 细说java系列之反射

    什么是反射 反射机制允许在Java代码中获取被JVM加载的类信息,如:成员变量,方法,构造函数等. 在Java包java.lang.reflect下提供了获取类和对象反射信息的相关工具类和接口,如:F ...

  7. MySQL版本升级参考资料【转】

    MySQL升级参考资料 MySQL 升级的最佳实践 - 技术翻译 - 开源中国社区https://www.oschina.net/translate/mysql-upgrade-best-practi ...

  8. Linux入门基础之 下

    八.Linux 管道.重定向及文本处理 8.1.Linux 多命令协作:管道及重定向 8.1.1 开源文化 开源文化的核心理念之一就是不要重复发明轮子,很多的开源软件都是现有软件.代码.功能的重新组合 ...

  9. JAVA服务实例内存高问题排查及解决

    生产服务内存高问题 问题描述 1."计算中心" 服务在生产环境运行一段时间后,实际占用内存4.8G,业务运行正常,未出现OOM.(本文以此服务进行排查) 2.生产环境的老项目,均出 ...

  10. 快速全面了解QT软件界面开发技术

    快速全面了解QT软件界面开发技术     目录 前言 一. 学习QT可能的目的是什么? 只想体验一下QT? 当前的项目选择了用QT. 为将来做QT技术储备. 二. QT的核心技术优势是什么? QT在软 ...

随机推荐

  1. Visual Studio 2022 开发 STM32 单片机 - 环境搭建点亮LED灯

    安装VS2022社区版软件 选择基础的功能就好 安装VisualGDB软件(CSDN资源) 按照提示一步一步安装就好 VisualGDB激活软件(CSDN资源) 将如下软件放在VisualGDB的安装 ...

  2. Java调用C++动态链接库——Jni

    最近项目需要,将C++的算法工程编译成动态链接库,交给 Java后台当作函数库调用.就去了解了下Jni.使用起来还是比较方便的. 1.  首先编写Java的调用类.例如:    public clas ...

  3. Tubian系统无法打开Android子系统的解决方法

    打开Konsole,Konsole在程序菜单(左下角Logo)-系统中 输入: sudo nano /var/lib/waydroid/waydroid.cfg 回车 按方向键,把光标移动到[prop ...

  4. n维偏序 方法记录

    题解 首先我们要对一个地点能否到达建立认知:一个地点能到达不仅仅是能从它的上一个点或上上个点跳到,而是能从第一个点开始跳一路跳到.就好比说,咱吃了6个包子吃饱了,但咱不能只付第6个包子的钱. 方法一: ...

  5. 手把手教你使用LabVIEW OpenCV dnn实现物体识别(Object Detection)含源码

    前言 今天和大家一起分享如何使用LabVIEW调用pb模型实现物体识别,本博客中使用的智能工具包可到主页置顶博客LabVIEW AI视觉工具包(非NI Vision)下载与安装教程中下载 一.物体识别 ...

  6. springboot的注解声明过滤器配置错误导致拦截所有请求。

    究其原因, 原来spring 扫包时候 扫了Webfilter 注解,注册了一次过滤匹配路径,扫了Component注解(又注册了一次过滤匹配路径,默认是全路径). Component注解后于WebF ...

  7. 堆内存动态分配情况和jvm调优方向

    由上图可以看出: 堆中分为新生代(占堆1/3内存)和老年代(占堆2/3内存), 新生代又分为Eden区(占新生代内存的8/10)和survivor区(占新生代内存的2/10), survivor区又分 ...

  8. Flink WordCount入门

    下面通过一个单词统计的案例,快速上手应用 Flink,进行流处理(Streaming)和批处理(Batch) 单词统计(批处理) 引入依赖 <!--flink核心包--> <depe ...

  9. js中通过正则表达式验证邮箱是否合法

    文章目录 1.效果展示 2.问题描述 3.代码实现 1.效果展示 2.问题描述 当用户在输入框输入邮箱后.点击验证邮箱按钮.系统给出提示信息. 3.代码实现 <!DOCTYPE html> ...

  10. Redis数据结构(一)-Redis的数据存储及String类型的实现

    1 引言 Redis作为基于内存的非关系型的K-V数据库.因读写响应快速.原子操作.提供了多种数据类型String.List.Hash.Set.Sorted Set.在项目中有着广泛的使用,今天我们来 ...