dubbo當前版本 2.7.3 期望升級到 3.0.11。 升級過程 maven依賴變更 <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>3.0.11</version> ...
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主要新特性
- 服務註冊與發現改版 由介面級別改為應用級
- 雲原生更好的支持 如native image,dubbo proxyless Mesh,
- 可視化的dubbo-admin服務治理能力
- 全新通信協議Triple 讓跨語言RPC邁了一大步,支持點對點調用、stream 流式調用。寫proto IDL 文件可生成各類客戶端代碼,完全相容
grpc
讓java與
go`成為後端深度合作伙伴
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協議支持自定義異常回傳。
轉載請註明出處。
作者:peachyy
出處:http://www.cnblogs.com/peachyy/
出處:https://peachyy.gitee.io/
出處:https://peachyy.github.io/
公眾號: