dubbo2升級到dubbo3實踐

来源:https://www.cnblogs.com/peachyy/archive/2022/12/12/16976775.html
-Advertisement-
Play Games

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.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協議支持自定義異常回傳。

轉載請註明出處。

作者:peachyy

出處:http://www.cnblogs.com/peachyy/

出處:https://peachyy.gitee.io/

出處:https://peachyy.github.io/

公眾號:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ADB批量截圖,且用時間命名 一、前言: 因為工作的需要,我要將安卓一體機上的運行圖片截圖保留做一個操作手冊,但是我又不想在cmd裡面一行一行的寫命令,於是我就參照同事給的bat腳本寫了一個用時間命令截圖名字的bat腳本,這個腳本不會受0-9或者10-24小時時段的影響。 二、腳本如下: set " ...
  • 好家伙, 1.數組 Array應該就是ECMAScript中最常用的類型了。ECMAScript數組跟其他編程語言的數組有很大區別。 跟其他語言中的數組一樣,ECMAScript 數組也是一組有序的數據, 但跟其他語言不同的是,數組中每個槽位可以存儲任意類型的數據。 這意味著可以創建一個數組,它的第 ...
  • 本章將和大家分享JS中URLSearchParams的基本用法。話不多說,下麵我們直接來看代碼。 一、JS中URLSearchParams的基本用法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-e ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 目前平臺前端使用的是原生CSS+BEM命名,在多人協作的模式下,容易出現樣式衝突。為了減少這一類的問題,提升研效,我調研了業界上主流的7種CSS解決方案,並將最終升級方案落地到了工程中。 樣式衝突的原因 目前遇到的樣式衝突的原因,其實根本 ...
  • 一、JS執行機制 JS語言有個特點是單線程,即同一時間只能做一件事。單線程就意味著,所有的任務需要排隊,前一個任務結束,才會執行後一個任務,可能造成頁面渲染不連貫。 為瞭解決這個問題,利用多核CPU的計算能力,允許JS腳本創建多個線程,即同步和非同步。 同步任務: 同步任務都在主線程上執行,形成一個執 ...
  • 關於 SpringBoot 的自動裝配功能,相信是每一個 Java 程式員天天都會用到的一個功能,但是它究竟是如何實現的呢?今天阿粉來帶大家看一下。 自動裝配案例 首先我們通過一個案例來看一下自動裝配的效果,創建一個 SpringBoot 的項目,在 pom 文件中加入下麵的依賴。 <depende ...
  • 這本書是寫什麼的? 這是一本 Go 語言快速入門手冊,目標讀者是有任一編程語言基礎,希望以最快的時間 (比如一個周末) 入門 Go 語言。 這本書應該怎麼讀? 書中幾乎沒有較長篇幅的理論知識,更多的是 示例驅動開發,鼓勵讀者通過快速實踐加深基礎理解,加快學習速度。 全書按照章節順序閱讀即可,其中一些 ...
  • 背景 管理資料庫的界面工具。 開發團隊中一般有非技術背景人員,比如: 產品,功能測試人員; 對他們來說,可能安裝資料庫管理工具客戶端都很麻煩,需要一款線上的網頁工具能方便他們查閱數據。 本地docker安裝 單庫: docker run --name myadmin -d -e PMA_HOST=l ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...