本地存根|学习笔记

简介: 快速学习本地存根

开发者学堂课程【阿里巴巴分布式服务框架 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

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

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

相关文章
|
SQL 开发框架 JSON
honeycomb使用|学习笔记
快速学习honeycomb使用
709 0
honeycomb使用|学习笔记
|
人工智能 安全
学习笔记7
人工智能课程
85 0
|
存储 缓存 固态存储
Fatcache学习笔记
Fatcache学习笔记
Fatcache学习笔记
|
Scala 开发者
ListBuffer 的使用 | 学习笔记
快速学习 ListBuffer 的使用
ListBuffer 的使用 | 学习笔记
|
数据可视化 Java 开发工具
超详细的vimtutor学习笔记(中)
第一讲 编辑 1.1 移动光标 使用 h、j、k、l 键可以使光标实现左、下、上、右的移动。 也可以使用 ↑ ↓ ← → 进行上下左右的移动。
110 0
|
机器学习/深度学习 算法 开发者
总结与回顾| 学习笔记
快速学习总结与回顾。
总结与回顾| 学习笔记
|
设计模式 XML 前端开发
回顾 | 学习笔记
快速学习回顾,介绍了回顾系统机制, 以及在实际应用过程中如何使用。
回顾 | 学习笔记
|
人工智能 开发者
一点一世界 | 学习笔记
快速学习一点一世界
一点一世界 | 学习笔记
|
人工智能 开发者
特征空间与应用 | 学习笔记
快速学习特征空间与应用
特征空间与应用 | 学习笔记
|
开发者 Python
__name__的使用 | 学习笔记
快速学习__name__的使用
__name__的使用 | 学习笔记