本地呼叫
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)