Dubbo本地存根

Stella981
• 阅读 419

  在远程调用服务提供者的实现之前,如果需要做一些参数验证、缓存、判断、小功能等等,满足要求再调用服务提供者的远程服务,则我们可以通过编写一个本地存根来实现这种功能。

(1)、在公共项目中或服务消费者项目中编写一个远程接口的本地存根实现。

 1 package cn.coreqi.service.stub;
 2 
 3 import cn.coreqi.entities.User;
 4 import cn.coreqi.service.UserService;
 5 
 6 import java.util.List;
 7 
 8 public class UserServiceStub implements UserService {
 9     private final UserService userService;  //存储远程接口的代理实现
10 
11     //必须有一个有参构造器,传入的是远程接口的代理实现
12     public UserServiceStub(UserService userService) {
13         //构造函数传入的是UserService的远程代理对象
14         this.userService = userService;
15     }
16 
17     @Override
18     public void addUser(User user) {
19         try {
20             //在此处进行缓存、参数验证等等
21             //如果通过验证则调用远程代理实现的方法
22             if(user != null) {
23                 userService.addUser(user);
24             }
25         }
26         catch (Exception e){
27             //可以在此处进行容错等任何AOP拦截事项
28         }
29     }
30 
31     @Override
32     public void delById(Integer id) {
33         try {
34             //在此处进行缓存、参数验证等等
35             //如果通过验证则调用远程代理实现的方法
36             if(id != 0 || id != null){
37                 userService.delById(id);
38             }
39         }
40         catch (Exception e){
41             //可以在此处进行容错等任何AOP拦截事项
42         }
43     }
44 
45     @Override
46     public void modifyUser(User user) {
47         try {
48             //在此处进行缓存、参数验证等等
49             //如果通过验证则调用远程代理实现的方法
50             if(user != null){
51                 userService.modifyUser(user);
52             }
53         }
54         catch (Exception e){
55             //可以在此处进行容错等任何AOP拦截事项
56         }
57     }
58 
59     @Override
60     public User getById(Integer id) {
61         try {
62             //在此处进行缓存、参数验证等等
63             //如果通过验证则调用远程代理实现的方法
64             if(id != 0 || id != null){
65                 return userService.getById(id);
66             }
67         }
68         catch (Exception e){
69             //可以在此处进行容错等任何AOP拦截事项
70             return null;
71         }
72         return null;
73     }
74 
75     @Override
76     public List<User> getList() {
77         try {
78             //在此处进行缓存、参数验证等等
79             //如果通过验证则调用远程代理实现的方法
80             return userService.getList();
81         }
82         catch (Exception e){
83             //可以在此处进行容错等任何AOP拦截事项
84             return null;
85         }
86     }
87 }

(2)、在服务消费者配置文件中配置本地存根

1     <!--3、声明需要调用的远程服务接口,生成远程服务代理,可以和本地Bean一样使用-->
2     <dubbo:reference id="userService" interface="cn.coreqi.service.UserService" stub="cn.coreqi.service.stub.UserServiceStub"/>
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
C++实现简单的RPC框架
简介    RPC是远程过程调用(RemoteProcedureCall)的缩写形式 ,RPC的目的是为了简化网络通信,让用户可以专注于业务处理,不用关心网络层的处理,真正实现在客户端A中调用函数F就可以调用服务端B中的函数F的目的。    RPC模型引入存根进程(stub)的概念, 对于服务端的服务类A,在客户端通过A::s
Stella981 Stella981
2年前
Nepxion Discovery 5.5.0 发布
!(https://oscimg.oschina.net/oscnet/f81c043194ef4732880459d00c1a720e.png)发布日志功能更新:增加基于Opentracing调用链的支持,目前支持UberJaeger,实现在SpringCloudGateway、Zuul和服务上的灰度
Easter79 Easter79
2年前
SpringCloud Alibaba微服务实战二十
!(https://oscimg.oschina.net/oscnet/d8c498ec1a794ad3ac37338f40db0851.png)在之前的项目中我们已经实现了使用Feign调用远程接口,本章内容主要是借助sentinel实现Feign接口熔断器功能。概述首先我们看看不使用熔断器的情况下调用一个没有启动的服务会出现
Stella981 Stella981
2年前
Netty RPC的简易DEMO
这个是rpc远程调用的简单demo:Consumer通过rpc远程调用Provider的服务方法sayHelloWorld(Stringmsg),然后Provider返回""HelloWorld"给Consumer。这里采用netty来实现远程通信实现rpc调用,消费者通过代理来进行远程调用远程服务。本文涉及的知识点有代理模式,jd
Stella981 Stella981
2年前
Dubbo 路由机制的实现
!(https://oscimg.oschina.net/oscnet/up76daef0a0724de6bbc213914b2d334683c1.png)Dubbo路由机制是在服务间的调用时,通过将服务提供者按照设定的路由规则来决定调用哪一个具体的服务。路由服务结构Dubbo实现路由都是通过实现RouterFactor
Stella981 Stella981
2年前
Dubbo是什么?能做什么?
1\.Dubbo是什么?Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用
Stella981 Stella981
2年前
Dubbo之服务调用
概述Dubbo能够像调用本地服务一样调用远程服务,是依赖于Dubbo的代理机制。业务系统调用的服务方法,使用代理类,代理类里隐藏了远程通信的功能。代理对象会代理到InvokerInvocationHandler上,再调用它属性Invoker_invoke_()方法。这个Invoker是服务引用的过程中由Protocol创建的。比如
暗箭伤人 暗箭伤人
7个月前
【www.ithunter.club】 20230922下午
不容易的2023年,我们一起努力【www.ithunter.club】(2023092208:00:00.8872062023092216:00:00.887206)1.人事招聘专员数名(可选远程或入职)2.招聘向坐标东京Yahoo、Shift、L