本地存根|学习笔记

简介: 快速学习本地存根

开发者学堂课程【阿里巴巴分布式服务框架 Dubbo 快速入门本地存根】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/624/detail/9470


本地存根


服务的消费者 consumer 要调用服务提供者 provider 的功能,它们是远程调用,而功能的实现都在 provider 这一段,consumer 相当于只有远程的接口,每次需要调用,都要连接 provider 来调用实现,有时想真正调用之前,可能需要做一些参数验证,做一些缓存,这样就可以编写一个本地存根。

远程引用的接口在服务消费者本地也有本地代码,本地存根代码调用之前,需做一些判断或做一些小功能,若满足需要的要求,再去运用远程代理对象调远程服务,若不满足,就可以不调用。

上述需要怎么做?

我们只需要在消费方写一个远程接口的本地存根实现,必须有一个有参构造器,有参构造器传入远程接口的代理实现,这是 dubbo 默认传进来的。

当判断执行通过以后,再来调用代码,这段代码相当于调用远程服务真正的功能。

代码为

//构造函数传入真正的远程代理对象

public (BarService  barService ){

this.barService=barService;

}

public String sayHello(String name){

//此代码在客户端执行,你可以在客户端做 ThreadLocal 本地缓存,或预先验证参数是否合法,等等

try{

return barService.sayHello(name);

}catch(Exception e){

//你可以容错,可以做任何 AOP 拦截事项

Return“容错数据”;

进行实验:

Order-service 的实现,想要调 user-service,在本地名称先写 UserserviceStub,并在本地存根实现 user-service 接口。

在 USerservice 接口实现后,有一个方法,

// TODO Auto-generated method stub

Private final UserService usrService;

//注入 USerService

并使用有参构造器的方式(如下图)

image.pngimage.png

此时 dubbo 自动创建本地存根对象

*//传入 Userservice 远程代理对象

*@param userService

此时可在本地存根里获取用户地址列表

@Override

public List getUserAddressList(String userId){

//TODO Auto-generated method stub

If(!StringUtils.isEmpty(userId)){

return  userService.getUserAddressList(userId);

}

//若 userId 不是空串,进行远程调用

return null;

}

//否则 return 成空的

可以有一个本地存根的实现,可在之前做一些小验证,写好之后需要配置

<!--配置本地存根-->

<dubbo:reference interface=”com.atguigu.gmall.service.UserService”

id=”userService” timeout=”5000” retries=”3” version=”*” stub=”com.atguigu.gmall.service.imp.UserServiceStub”

运行期间,若本地存根代码被调用,代码为

@Override

public  List getUserAddressList(String userId){

//TODO Auto-generated method stub

System.out,print(“UserserviceStub……”)

If(!StringUtils.isEmpty(userId)){

return  userService.getUserAddressList(userId);

}

进行测试:

运行 main 方法

image.png

本地存根确实被调用,调用后才进行调用远程的服务,判断通过了。

本地存根实际在开发中应该放在接口处,接口远程的实现在另外一个工程里,但在调用远程实现前,可把本地存根代码放进来。

相关文章
|
4月前
|
数据采集 数据可视化 数据挖掘
学习笔记pirate
- 使用Python的`sklearn`进行数据预处理,包括AdaBoost回归器的网格搜索调优,处理时间序列数据,并执行数据可视化。 - 应用`transformers`库对预训练的语言模型进行微调,针对RTE、MRPC和SST-2任务进行文本分类,使用PEFT(Pointer Enhanced Fine-Tuning)模型。 - 进行图像分割任务,包括图像预处理、定义数据集、训练DeepLabV3 ResNet50模型。
|
机器学习/深度学习 人工智能 调度
学习笔记6
人工智能课程
68 0
|
存储 消息中间件 弹性计算
尘央大佬带你学| 学习笔记
快速学习尘央大佬带你学。
尘央大佬带你学| 学习笔记
|
开发者
需要、欲望、需求 | 学习笔记
快速学习需要、欲望、需求。
218 0
需要、欲望、需求 | 学习笔记
|
XML SQL 机器学习/深度学习
M-PEG7 | 学习笔记
快速学习 M-PEG7,介绍了 M-PEG7系统机制, 以及在实际应用过程中如何使用。
M-PEG7 | 学习笔记
|
分布式计算 算法 Hadoop
fuzzyQuery | 学习笔记
快速学习 fuzzyQuery
fuzzyQuery | 学习笔记
|
弹性计算 缓存 Linux
使用 syncthing | 学习笔记
快速学习使用 syncthing,介绍了使用 syncthing 系统机制, 以及在实际应用过程中如何使用。
使用 syncthing | 学习笔记
|
C++ 开发者 Python
|
机器学习/深度学习 算法 开发者
总结与回顾| 学习笔记
快速学习总结与回顾。
|
XML 设计模式 JavaScript
回顾 | 学习笔记
快速学习回顾,介绍了回顾系统机制, 以及在实际应用过程中如何使用。