• Dubbo本地存根


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

    (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"/>
  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10359982.html
Copyright © 2020-2023  润新知