本地存根
了解 Dubbo3 中使用本地 Stub 在客户端执行部分逻辑
功能描述
远程服务之后,客户端通常只有接口,实现都在服务器端,但提供者有时希望在客户端执行一些逻辑。
使用场景
做 ThreadLocal 缓存,提前验证参数,调用失败后伪造容错数据等,这时需要在 API 中带一个 Stub,客户端生成一个 Proxy 实例,会通过构造函数1将 Proxy 传递给 Stub,然后将 Stub 暴露给用户,Stub 可以决定是否调用 Proxy。
如何使用
spring 配置文件配置
<dubbo:consumer interface="com.foo.BarService" stub="true" />
或者
<dubbo:consumer interface="com.foo.BarService" stub="com.foo.BarServiceStub" />
提供 Stub 实现2
package com.foo;
public class BarServiceStub implements BarService {
private final BarService barService;
// The constructor passes in the real remote proxy object
public BarServiceStub(BarService barService){
this. barService = barService;
}
public String sayHello(String name) {
// This code is executed on the client side, you can do ThreadLocal local cache on the client side, or pre-verify whether the parameters are legal, etc.
try {
return barService.sayHello(name);
} catch (Exception e) {
// You are fault tolerant and can do any AOP interception
return "fault tolerance data";
}
}
}
上次修改时间:2023 年 1 月 2 日:增强 en 文档 (#1798) (95a9f4f6c1c)