本地调用

Dubbo 中的本地调用

功能描述

本地调用使用 injvm 协议,这是一个伪协议。它不打开端口,不发起远程调用,只在 JVM 中直接关联,但执行 Dubbo 的 Filter 链。

使用场景

当我们需要调用远程服务,而远程服务尚未开发,并且使用 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)