本地呼叫

Dubbo 中的本地呼叫

功能說明

本地呼叫使用 injvm 協定,這是一種虛擬協定。它不開啟埠,不發起遠端呼叫,僅在 JVM 中直接關聯,但會執行 Dubbo 的過濾器鏈。

使用場景

當我們需要呼叫遠端服務時,遠端服務尚未開發完成,可以使用 injvm 協定在本地實作類似的服務。呼叫此服務時,我們可以呼叫本地的實作服務。

使用方法

定義 injvm 協定

<dubbo:protocol name="injvm" />

設定預設協定

<dubbo:provider protocol="injvm" />

設定服務協定

<dubbo:service protocol="injvm" />

優先使用 injvm

<dubbo:consumer injvm="true" .../>
<dubbo:provider injvm="true" .../>

或者

<dubbo:reference injvm="true" .../>
<dubbo:service injvm="true" .../>

注意事項

從 Dubbo 2.2.0 版本開始,每個服務預設都會在本地暴露,無需任何配置即可在本地引用。如果您不希望服務遠端暴露,只需在提供者中將協定設定為 injvm 即可。

自動暴露

2.2.0 版本開始,每個服務預設都會在本地暴露。引用服務時,預設優先使用本地服務。如果您想要引用遠端服務,可以使用以下配置強制引用遠端服務。

<dubbo:reference ... scope="remote" />

動態配置呼叫行為

從 `3.2` 版本開始,Dubbo 提供的 API 允許使用者動態配置單次呼叫是本地呼叫還是遠端呼叫,未配置時預設優先引用本地服務。

將單次呼叫配置為遠端呼叫。

RpcContext.getServiceContext().setLocalInvoke(false);

將單次呼叫配置為本地呼叫。

RpcContext.getServiceContext().setLocalInvoker(true);

最後修改日期:2023 年 3 月 23 日:更新 local-call.md (#2455) (4d8e6b4d1bf)