Dubbo框架不常用的幾個「秘密」

2021-09-14 00:51:44 字數 1189 閱讀 9164

一 多版本

當乙個介面實現,出現不相容公升級時,可以用版本號過渡,版本號不同的服務相互間不引用,用法如下:

利用dubbo該特性,我們能夠實現一些功能的灰度發布,實現步驟如下:

介面舊的實現定義version=「1.0.0」,介面新的實現version=「2.0.0」

consumer端定義version="*"

這樣定義provider和consumer後,新舊介面實現各承擔50%的流量;

使用該特修改,我們可以在使用壓力不大的情況下,進行服務提供者的版本公升級。

二 隱式引數

可以通過 rpccontext 的 setattachment() 和 getattachment() 在consumer和provider之間進行引數的隱式傳遞,例如controller層攔截登入token,把根據token得到的memberid傳給dubbo服務就能使用隱式引數傳遞的方式,setattachment()設定的 kv 對,在完成一次遠端呼叫會被清空,即多次遠端呼叫要多次設定。

三 上下文

上下文中存放的是當前呼叫過程中所需的環境資訊。所有配置資訊都將轉換為 url 的引數rpccontext 是乙個 threadlocal 的臨時狀態記錄器,當接收到 rpc 請求,或發起 rpc 請求時,rpccontext 的狀態

都會變化。例如:a 調 b,b 再調 c,則 b 機器上,在 b 調 c 之前,rpccontext 記錄的是 a 調 b 的資訊,在 b 調 c

之後,rpccontext 記錄的是 b 調 c 的資訊。使用方式:

boolean isconsumerside = rpccontext.getcontext().isconsumerside();

三 本地偽裝

本地偽裝通常用於服務降級,例如某驗權服務,當服務提供方全部掛掉後,客戶端不丟擲異常,而是通過 mock 資料返回授權失敗。使用方式如下,mock指定的實現類在provider丟擲rpcexception異常時執行(一定要丟擲rpcexception異常才執行),取代遠端返回結果:

四 訪問日誌

如果服務需要預熱時間,比如初始化本地快取,等待相關資源就位等,可以使用delay進行延遲暴露。使dubbo在spring容器初始化完後延遲多少毫秒再暴露服務。使用方式:

oracle 幾個有用但不常用的函式

select substr abcd 2,2 value from dual 取字串 select replace abcdefbcd bcd 你 value from dual 替換字串 select translate fasdbfasegas fa 我 value from dual sele...

C 幾個不常用的關鍵字

asm 插入乙個彙編指令.auto 宣告乙個本地變數.const cast 從乙個const變數中丟擲.dynamic cast 動態投射.explicit 僅用在構造器的正確匹配.extern 告訴編譯器在別的地方變數已經被定義過了.friend 允許非函式成員使用私有資料.inline 定義乙個...

C 中幾個比較不常用的關鍵字

mutable關鍵字 關鍵字mutable是c 中乙個不常用的關鍵字,他只能用於類的非靜態和非常量資料成員 我們知道乙個物件的狀態由該物件的非靜態資料成員決定,所以隨著資料成員的改變,對像的狀態也會隨之發生變化 如果乙個類的成員函式被宣告為const型別,表示該函式不會改變物件的狀態,也就是 該函式...