Dubbo本地存根

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

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

1 1 package cn.coreqi.service.stub; 2 2 3 3 import cn.coreqi.entities.User; 4 4 import cn.coreqi.service.UserService; 5 5 6 6 import java.util.List; 7 7 8 8 public class UserServiceStub implements UserService { 9 9 private final UserService userService; //存储远程接口的代理实现 1010 1111 //必须有一个有参构造器,传入的是远程接口的代理实现 1212 public UserServiceStub(UserService userService) { 1313 //构造函数传入的是UserService的远程代理对象 1414 this.userService = userService; 1515 } 1616 1717 @Override 1818 public void addUser(User user) { 1919 try { 2020 //在此处进行缓存、参数验证等等 2121 //如果通过验证则调用远程代理实现的方法 2222 if(user != null) { 2323 userService.addUser(user); 2424 } 2525 } 2626 catch (Exception e){ 2727 //可以在此处进行容错等任何AOP拦截事项 2828 } 2929 } 3030 3131 @Override 3232 public void delById(Integer id) { 3333 try { 3434 //在此处进行缓存、参数验证等等 3535 //如果通过验证则调用远程代理实现的方法 3636 if(id != 0 || id != null){ 3737 userService.delById(id); 3838 } 3939 } 4040 catch (Exception e){ 4141 //可以在此处进行容错等任何AOP拦截事项 4242 } 4343 } 4444 4545 @Override 4646 public void modifyUser(User user) { 4747 try { 4848 //在此处进行缓存、参数验证等等 4949 //如果通过验证则调用远程代理实现的方法 5050 if(user != null){ 5151 userService.modifyUser(user); 5252 } 5353 } 5454 catch (Exception e){ 5555 //可以在此处进行容错等任何AOP拦截事项 5656 } 5757 } 5858 5959 @Override 6060 public User getById(Integer id) { 6161 try { 6262 //在此处进行缓存、参数验证等等 6363 //如果通过验证则调用远程代理实现的方法 6464 if(id != 0 || id != null){ 6565 return userService.getById(id); 6666 } 6767 } 6868 catch (Exception e){ 6969 //可以在此处进行容错等任何AOP拦截事项 7070 return null; 7171 } 7272 return null; 7373 } 7474 7575 @Override 7676 public List<User> getList() { 7777 try { 7878 //在此处进行缓存、参数验证等等 7979 //如果通过验证则调用远程代理实现的方法 8080 return userService.getList(); 8181 } 8282 catch (Exception e){ 8383 //可以在此处进行容错等任何AOP拦截事项 8484 return null; 8585 } 8686 } 8787 }

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

11 <!--3、声明需要调用的远程服务接口,生成远程服务代理,可以和本地Bean一样使用--> 22 <dubbo:reference id="userService" interface="cn.coreqi.service.UserService" stub="cn.coreqi.service.stub.UserServiceStub"/>
点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

C++实现简单的RPC框架

简介    RPC是远程过程调用(RemoteProcedureCall)的缩写形式 ,RPC的目的是为了简化网络通信,让用户可以专注于业务处理,不用关心网络层的处理,真正实现在客户端A中调用函数F就可以调用服务端B中的函数F的目的。    RPC模型引入存根进程(stub)的概念, 对于服务端的服务类A,在客户端通过A::s

SpringCloud Alibaba微服务实战二十

!(https://oscimg.oschina.net/oscnet/d8c498ec1a794ad3ac37338f40db0851.png)在之前的项目中我们已经实现了使用Feign调用远程接口,本章内容主要是借助sentinel实现Feign接口熔断器功能。概述首先我们看看不使用熔断器的情况下调用一个没有启动的服务会出现