当前位置: 首页 > news >正文

dede 网站地图样式希爱力的作用与功效

dede 网站地图样式,希爱力的作用与功效,网站建设售后服务内容,青海海东平安县建设局网站目录 绪论实践 dubbo-demo-interfacedubbo-demo-xml-providerdubbo-demo-xml-consumer启动 绪论 今天主要学习并实践dubbo的本地存根stub机制。首先了解一下官网文档对本地存根的介绍: 远程服务后,客户端通常只剩下接口,而实现全在服务器…

目录

  • 绪论
  • 实践
    • dubbo-demo-interface
    • dubbo-demo-xml-provider
    • dubbo-demo-xml-consumer
    • 启动

绪论

今天主要学习并实践dubbo的本地存根stub机制。首先了解一下官网文档对本地存根的介绍:

远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑。
比如:做 ThreadLocal 缓存,提前验证参数,调用失败后伪造容错数据等等。
核心思想:API 中带上 Stub,客户端生成 Proxy 实例,**会把 Proxy 通过构造函数传给 Stub** ,然后把 Stub 暴露给用户,Stub 可以决定要不要去调 Proxy。

Stub会使用代理模式将原有的远程调用service进行包装,让使用者可以在远程服务调用前后做一些通用处理,非常适合做缓存容错,或者日志处理,异常包装等。故本地存根机制类似与AOP机制中的around advice(环绕增强)
则本地存根执行顺序:
1.服务消费者发起调用;
2.如果服务消费者端存在本地存根 Stub 的话,会先执行本地存根;
3.本地存根 Stub 持有远程服务的 Proxy 对象,Stub 在执行的时候,会先执行自己的逻辑(before),然后通过Proxy 发起远程调用,最后在返回过程之前也会执行自己的逻辑(after-returning)
4.如果远程服务的 Proxy 对象在执行过程中抛出了 exception,会执行服务消费端的本地伪装 Mock 的逻辑 (after-throwing)【后面再议】,返回容错数据,从而达到服务降级的目的。
如图:
在这里插入图片描述

实践

虽然dubbo官网简单给了本地存根的示例,但不是能够足以解决新手实战问题,其他博客千篇一律,没有几乎什么改进的地方,溪源学习的时候也是在花费了两个下班的时间搞定的实践,实属坎坷~
写在前面

dubbo官网给出两种设置本地存根的示例

  • stub的属性值设置为实现类的全限定名;
  • stub的属性值,则默认设置为true
    在这里插入图片描述

溪源主要给大家说下第二种方式:踩坑点
如果默认将stub属性设置为true,则必须保证本地存根实现类以Stub命名结尾,例如UserServiceStub.
那为什么要这么设置呢????给大家贴一下源码ServiceConfig#checkAndUpdateSubConfigs()类中。
如果实现类不以Stub结束,那反射查找本地存根实现类便找不到,又谈何实现本地存根的逻辑呢~
在这里插入图片描述
踩坑点相信大家已经清楚,下面开始进入实战环节。

再看下dubbo官网本地存根,细品细品:
在这里插入图片描述

dubbo-demo-interface

  • 目录结构如下
    在这里插入图片描述

  • UserService
    简单定义一个方法

    /**

    • @author wx
    • @date 2020/9/6 11:39 下午
    • 测试本地存根服务接口
      /
      public interface UserService {
      /
      *
      • 根据用户名,返回用户名字
      • @param userId 用户ID
      • @return 用户名
        */
        String getUserName(String userId);
        }
  • UserServiceStub

    /**

    • @author wx

    • @date 2020/9/6 11:09 下午

    • 服务消费者实现接口,并实现本地存根逻辑
      */
      public class UserServiceStub implements UserService {
      private static final String USER_ID = “1503891”;

      private final UserService userService;

      /**

      • 通过构造方法将服务接口代理对象(接口实现类对象)传入stub
      • @param userService
        */
        public UserServiceStub(UserService userService) {
        this.userService = userService;
        }

      @Override
      public String getUserName(String userId) {
      System.out.println(“开始执行服务消费端本地存根逻辑”);
      if (StringUtils.isBlank(userId)) {
      return “userId is null”;
      }
      if (!USER_ID.equals(userId)) {
      return “user not exits”;
      }
      String userName = userService.getUserName(userId);
      System.out.println(“结束执行服务消费端本地存根逻辑”);
      return userName;
      }
      }

dubbo-demo-xml-provider

  • 目录结构
    在这里插入图片描述

  • stub-provider.xml
    在这里插入图片描述

  • UserProviderStubServiceImpl

    /**

    • @author wx

    • @date 2020/9/6 11:09 下午

    • 服务消费者实现接口,并实现本地存根逻辑
      */
      @Service
      public class UserProviderStubServiceImpl implements UserService {
      private static final String USER_ID = “1503891”;

      @Override
      public String getUserName(String userId) {
      return USER_ID.equals(userId) ? “溪~源” : “”;
      }
      }

  • ProviderApplication

    /**
    * 服务端Stub测试
    * @throws IOException
    */
    private static void stubTest() throws IOException {
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“spring/stub-provider.xml”);
    context.start();
    System.in.read();
    }

dubbo-demo-xml-consumer

  • stub-consumer.xml
    消费者端并没有新增实现类,但溪源为了代码的整洁与后期维护、梳理,选择了新建stub-consumer.xml配置文件和单元测试的模式实践.
    在这里插入图片描述

  • ConsumerApplication

    private static void stubTest() {
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“spring/stub-consumer.xml”);
    UserService stubService = context.getBean(UserService.class);
    String userName = stubService.getUserName(“1503891”);
    System.out.println(userName);

    }
    

启动

分别启动provider,consumer如图:

  • 测试1
    将userId传为空
    在这里插入图片描述

  • 测试2
    在这里插入图片描述

到此为止,本地存根实践应用结束,大家对源码如何实现原理,可以借助此demo开始debug吧~

溪源初次接触dubbo本地存根机制,如文中存在错误之处,希望大家及时指正!

源码传送门:https://github.com/stream-source/dubbo/tree/master/dubbo-demo

http://www.ds6.com.cn/news/67013.html

相关文章:

  • 手机网站用什么域名橘子seo
  • 成都分想设计公司网站雅虎搜索
  • 网站建设都有那些费用搜索引擎查关键词排名的软件
  • 深圳网站公司招聘seo营销优化
  • 网站等保测评怎么做江苏网站推广
  • 宝安网站建设方案外包如何推广公司
  • 网站建设实训课指导书网站版式分析无代码系统搭建平台
  • 济南莱芜都市网南京百度快速排名优化
  • 免费注册b2b网站百度重庆营销中心
  • 做分享衣服网站的初衷是什么意思厦门百度推广开户
  • 在浙学网页设计与制作答案网站 seo
  • 专做外贸的网站有哪些做电商必备的几个软件
  • 哪个网站卖做阳具好点关联词有哪些 全部
  • asp网站连不上数据库网站搭建平台都有哪些
  • 番禺网站建设平台北京seo专员
  • 邢台企业做网站找谁企业营销培训课程
  • 网站改版 百度收录东莞今日新闻大事
  • 抚顺建设银行网站广州王牌seo
  • 弹幕视频网站开发优化关键词有哪些方法
  • 重庆模板建站公司手机卡顿优化软件
  • 建设银行善融商务网站百度投放广告一天多少钱
  • 深圳十大电商巨头seo关键词推广话术
  • 做网站郑州谷歌关键词挖掘工具
  • 和外国人做ic生意的网站网络服务网络推广
  • 网站改版 升级的目的常见的营销策略有哪些
  • 苹果商店app下载怎样优化标题关键词
  • 株洲网络科技有限公司seo1视频发布会
  • vue做的网站多么磁力搜索器 磁力猫在线
  • 一站式网站建设与运营职业培训学校
  • 阿里巴巴国际站买家版app会员制营销方案