本文转载自 Dubbo本地伪装 Mock,感谢老哥

公司有一个项目是安装在隔离的环境中,在想办法让项目在本地启动的时候,最后一关是Dubbo无法连接,于是想是否能够将所有的Dubbo进行本地模拟,先暂时让应用启动。

本地伪装通常用于在远程调用出错的情况下服务降级,即本地伪装用来做容错处理

通过将服务端设置睡眠使用得客户端调用超时,抛出异常

public String sayHello(String name) {// Dubbo 默认的超时时间是 1000 ms,这里通过睡眠 5000ms 来达到触发超时异常的发生// 由于超时的发生,这个结果并不会被返回给客户端,取而代之的是 org.apache.dubbo.remoting.TimeoutExceptiontry { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); }return "Hello " + name;
}

在客户端提供本地伪装的实现。当远程调用发生错误的时候,返回给调用方的不是服务端的 “hello name”,取而代之的是 “mock name”。

public class DemoServiceMock implements DemoService {public String sayHello(String name) {System.out.println("about to execute mock: " + DemoServiceMock.class.getSimpleName());return "mock " + name;}
}

要使用本地伪装的话,还需要在 mock-consumer.xml 中配置属性 mock。可以简单的通过指定 mock=“true” 来告诉 Dubbo 框架使用本地伪装,这个时候,本地伪装的包名需要和服务接口的包名一致,类名必须在服务接口的类名后加上 Mock 的后缀。例如,当服务接口名是 com.alibaba.dubbo.demo.DemoService 时,本地存根的全类名应该是 com.alibaba.dubbo.demo.DemoServiceMock。

<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService" mock="true"><dubbo:method name="sayHello" retries="0"></dubbo:method>
</dubbo:reference>

如果不希望使用默认的命名规则,也可以直接通过 mock 属性来指定本地伪装的全类名

<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService" mock="com.alibaba.dubbo.demo.consumer.DemoServiceMock"><dubbo:method name="sayHello" retries="0"></dubbo:method>
</dubbo:reference>

通过提供一个本地伪装的类,可以最大限度的控制出错之后的容错逻辑。有的时候,业务上并不需要这样灵活的机制,只有返回一个默认值的诉求,这个时候提供一个完整的本地伪装的实现就显得有点重了。或者线上出错的时候,应用并没有打包本地伪装,需要通过推送规则的方式临时对服务降级。Dubbo 框架为上面的这两种诉求都提供了快捷方式,帮助用户快速配置服务降级。

总结

本文介绍了 Dubbo 中本地存根和本地伪装的概念和用法。从本质来讲,本地存根和本地伪装等同于面向切面编程中的概念,通过诸如 Spring 框架提供的 AOP 编程可以达到同样的目的。通过本文如何开发一个本地存根和本地伪装的示例,读者可以直观的感受到通过框架提供的机制更加方便快捷。同时,对于很多简单的场景和动态配置推送的场景,框架提供了仅通过配置而无需编码的方式来满足,进一步提升了框架使用者的效率。

Dubbo本地伪装 Mock相关推荐

  1. Dubbo 本地调试,直连本地服务提供者心法

    Dubbo 本地调试,直连本地服务提供者心法 当你手头项目分了几个服务,而其中需要通过 dubbo 进行远程接口调用时,自测就成了一个让人感到麻烦的事情. 可能大家有听过一种方法,就是本地启动 pro ...

  2. Vue CLI 3.0脚手架如何在本地配置mock数据

    前后端分离的开发模式已经是目前前端的主流模式,至于为什么会前后端分离的开发我们就不做过多的阐述,既然是前后端分离的模式开发肯定是离不开前端的数据模拟阶段. 我们在开发的过程中,由于后台接口的没有完成或 ...

  3. Dubbo本地开发技巧

    背景 作为后端服务负载.前后分离的主要手段,dubbo在业界中使用率还比较高.随着Dubbo系统的增多,本地开发.调试就出现了麻烦之处 直接在开发本地起同样一份服务 由于Dubbo采用负载均衡的策略, ...

  4. Vue CLI 3.0脚手架如何在本地配置mock数据json

    前后端分离的开发模式已经是目前前端的主流模式,至于为什么会前后端分离的开发我们就不做过多的阐述,既然是前后端分离的模式开发肯定是离不开前端的数据模拟阶段. 我们在开发的过程中,由于后台接口的没有完成或 ...

  5. react中使用charles实现本地数据mock

    首先下载charles软件地址,更详细的使用方法都包含在操作文档里,包含汉化版补丁(下载后查看) 链接:https://pan.baidu.com/s/1Q5rMbcX0Wus7AwdGUWa-Wg ...

  6. Dubbo 本地存根

    场景: 当我们执行远程服务调用时,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,比如:提前验证参数,调用失败后伪造容错数据等等,此时就需要在 API 中带上 St ...

  7. DUBBO本地搭建及小案例

    DUBBO的介绍部分我这里就不介绍了,大家可参考官方文档. DUBBO的注册中心安装 DUBBO的注册中心支持好几种,公司用到zookeeper注册中心,所以我这边只说明zookeeper注册中心如何 ...

  8. dubbo 用户指南

    背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只需一个 ...

  9. DUBBO用户指南(笔记)

    背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构  当网站流量很小时,只需一 ...

  10. dubbo源码解析(四十一)集群——Mock

    集群--Mock 目标:介绍dubbo中集群的Mock,介绍dubbo-cluster下关于服务降级和本地伪装的源码. 前言 本文讲解两块内容,分别是本地伪装和服务降级,本地伪装通常用于服务降级,比如 ...

最新文章

  1. 「AutoML」激活函数如何进行自动学习和配置
  2. QQ web api
  3. java 的 i++ 和 ++i 的区别
  4. android剪切 图片,android 剪切图片
  5. 深度学习笔记(9) 优化算法(一)
  6. CS229——NODE1part1
  7. floodfill算法 java_OpenCV 3 floodFill(漫水填充)、图片的放大缩小 pyrUp、pyrDown、Resize JAVA OpenCV专题学习10...
  8. 更好的设计你的 REST API
  9. linux 安装apache resin,Linux下安装resin+apache+jdk+php+mysql(gd)全过程(二)
  10. Android开发:ZXing条码扫描-竖屏解决方案
  11. Android webview拦截请求
  12. EasyDarwin开源流媒体云平台支持EasyCamera摄像机、EasyCamera手机直播监控、EasyNVR等多终端接入
  13. 手机写java_手机怎么写java
  14. 编一程序,将两个字符串连接起来,不要用strcat函数.
  15. 路由器自动连接服务器无响应,路由器服务器无响应怎么办
  16. 一个老码农对职场的思考
  17. 软件测试需求分析方法有哪些,一起来看看吧
  18. mPEG-Phosphate,甲氧基聚乙二醇磷酸盐,mPEG-PHOS
  19. 2021互联网秋招,有哪些值得投的好公司?
  20. Android 中的自定义 Snackbar

热门文章

  1. L1-020 帅到没朋友 (20 分) — 团体程序设计天梯赛
  2. Mongodb 3.2.X 添加admin的root账户
  3. 浅谈assert()函数的用法
  4. OGNL(Object-Graph Navigation Language对象图定位语言)和struts2标签
  5. [翻译]利用C#获取终端服务(Terminal Services)会话的闲置时间
  6. 游戏筑基开发之动态数组(C语言)
  7. MPLS解决路由黑洞实验分析(华为设备)
  8. 软件包安装命令rpm和yum详解
  9. 凑算式——第七届蓝桥杯C语言B组(省赛)第三题
  10. Java 8 并发: Threads 和 Executors