Dubbo本地存根 本地偽裝(九)

2021-09-24 03:55:33 字數 1344 閱讀 7908

本地存根:

本地偽裝:

一般情況下,consumer端只有介面,實現全部在provider端。但有時候,provider想讓consumer端執行部分邏輯,如threadlocal 快取,提前驗證引數,呼叫失敗後偽造容錯資料等等。

provider端配置:

本來stub的邏輯是由provider提供的,但是上邊的配置中,stub="true"但是卻沒有提供任務具體的**。我想provider應該會基於介面提供乙個預設的stub,不要這樣用好了。

下邊是另外一種配置方法:

這種配置的話,provider端就提供了stub的**。

provider提供的stub的實現**:

package com.foo;

public class barservicestub implements barservice

public string sayhello(string name) catch (exception e) }}

注意它的構建方法,必需這樣實現可以看到,實際上它就是普通的**模式。

本地偽裝的意思是當provider端提供的服務不可用時,consumer並不是直接丟擲異常指出服務不可用,而是在本地偽造資料,不丟擲異常,通常用於服務降級。

配置:

上邊的話,本地會生成乙個預設的mock。

或者:

consumer端mock**的實現:

package com.foo;

public class barservicemock implements barservice

}

當實現並設定好mock後,consumer端在呼叫provider時,如果丟擲rpc異常,那麼異常會**獲,並且會觸發mock**的執行,很顯然的,consumer端將不需要再捕獲rpc異常了。

後邊還有一堆沒什麼用的特性,不寫了。

stub與mock很像,比較一下不同點:

stub的配置發生在provider端:

mock的配置發生在consumer端:

stub中的**由provider提供,mock中的**由consumer端實現。

stub總是會執行,實現上consumer端對這個東西無感。

mock是在consumer呼叫服務出現異常時觸發。

我覺得上邊這兩個東西沒有太大的用處,開發者很容易自行實現。就實現乙個**類,**的就是provider端實現的那個介面。然後裡邊的邏輯由consumer開發者自行實現,這樣也很方便。

Dubbo本地存根

參考文件 本地存根 可以提前驗證引數 呼叫失敗之後,偽造容錯資料等 寫乙個本地存根stub的實現 必須,提供乙個有參構造器 有參構造器,傳入的是遠端介面的 實現 不需要去傳這個引數,dubbo預設自動傳遞進來 可以新增判斷 判斷通過之後,再呼叫遠端服務 package com.foo public ...

dubbo服務暴露 本地暴露(二)

serviceconfig類 private void doexporturlsfor1protocol protocolconfig protocolconfig,list registryurls 我們進入這個方法 我們先看proxyfactory.getinvoker 方法,它是生成乙個inv...

dubbo 直連本地提供者 Dubbo的作用和特點

1.透明化的遠端方法呼叫,就像呼叫本地方法一樣呼叫遠端方法,只需簡單配置,沒有任何api侵入。2.軟負載均衡及容錯機制,可在內網替代f5等硬體負載均衡器,降低成本,減少單點。3.服務自動註冊與發現,不再需要寫死服務提供方位址,註冊中心基於介面名查詢服務提供者的ip位址,並且能夠平滑新增或刪除服務提供...