真正的大师永远怀着一颗学徒的心

哈喽!大家好,我是小奇,一位程序员界的学徒

小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧


前言

书接上回,昨天打了一天游戏,我是一顿操作猛如虎、一看战绩0-5,最后网管看不下去把电闸拉了,说我影响网吧的整体胜率,无奈我在一群小学生的哀求下离开了网吧(小学生:大哥我求你了,你快走吧,我们还想玩呢)。

昨天回到家没事就继续投简历呗,也别挑什么公司了,就是海投,海投知道什么意思吗,就是你的简历像投在大海上一样杳无音信(精辟~)。

还好最后终于有伯乐出现了,她发现了我这匹千里马,跟我约了第二天的面试,然后我们互换了微信。

加了微信也别闲着呀,先看看朋友圈,根据朋友圈判断一下这个伯乐好不好拿捏(嘿嘿~)。

看了朋友圈这伯乐挺正呀,就是不知道温不温柔,有没有刘婶那样温柔体贴~

一、面试

1、本地存根

面试官:我看你简历上写的精通Dubbo,那你能说一下Dubbo本地存根是什么吗?

我:我认为本地存根类似于AOP面向切面来实现一些功能,但是区别在于是在消费端调用服务端的时候在消费端执行的一些逻辑。

比如我们消费端在调用服务端之前可以在消费端进行参数的验证,在调用服务端之后如果出现异常,可以在消费端执行一些自定义的异常处理。

官网的解释是这样的:在 Dubbo 中利用本地存根在客户端执行部分逻辑

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



在 spring 配置文件中按以下方式配置:

<dubbo:service interface="com.foo.BarService" stub="true" />

<dubbo:service interface="com.foo.BarService" stub="com.foo.BarServiceStub" />

提供 Stub 的实现 :

package com.foo;
public class BarServiceStub implements BarService {
private final BarService barService; // 构造函数传入真正的远程代理对象
public BarServiceStub(BarService barService){
this.barService = barService;
} public String sayHello(String name) {
// 此代码在客户端执行, 你可以在客户端做ThreadLocal本地缓存,或预先验证参数是否合法,等等
try {
return barService.sayHello(name);
} catch (Exception e) {
// 你可以容错,可以做任何AOP拦截事项
return "容错数据";
}
}
}

2、本地伪装

面试官:嗯,那你能说一下Dubbo本地伪装又是什么吗?

我:本地伪装顾名思义就是在消费端本地伪装一个返回参数直接返回给消费端,原本的流程是消费端调用服务端,服务端返回什么消费端就返回什么。

但是现在假如服务端停机了,消费端调用服务端就无法返回想返回的参数类型的数据了,这个时候我们可以在消费端伪装一个返回的参数,这样在调用服务端失败了,或者根本就不调用服务端的时候就可以直接返回本地伪装的数据。

假如现在有个业务场景,就是消费者调用服务端正常就返回参数,异常就返回一个"容错数据"。

那么我们首先在 spring 配置文件中按以下方式配置:这里相当于BarService是一个本地伪装接口

<dubbo:reference interface="com.foo.BarService" mock="true" />

然后我们在工程中提供 Mock本地伪装接口的 实现:

package com.foo;
public class BarServiceMock implements BarService {
public String sayHello(String name) {
// 你可以伪造容错数据,此方法只在出现RpcException时被执行
return "容错数据";
}
}

这样在服务端出现异常的时候,客户端可以返回自己想返回的数据。

面试官:小伙子不错呀,什么时候能回北京入职呢

我:额。。。等等吧,现在还有好多家公司等着谈薪资呢,我得挑一家合适的。

面试官:你要多少我都给你,来我这吧

我:额。。。那就月薪100个W吧。

面试官:喂,你说什么我听不见,信号不好。。。

我:喂喂喂(嘟嘟嘟嘟嘟嘟嘟嘟。。。)。

二、总结

这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。

文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。

如果觉得我的文章还不错的话就点个赞吧

Dubbo本地存根是什么,Dubbo本地伪装又是什么?的更多相关文章

  1. Dubbo学习笔记-RPC扩展和本地Mock

    1.Dubbo介绍 Dubbo,一个是一款高性能Java RPC框架.私以为有中文官方文档,就不再重复介绍了 2.RPC扩展-本地存根stub RPC扩展功能:提前效验参数,缓存调用结果,日志记录等等 ...

  2. dubbo的本地存根(Stub)

    dubbo的本地存根的原理是:远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,那么就在服务消费者这一端提供了一个Stub类,然后当消费者调用provid ...

  3. Dubbo本地存根

    在远程调用服务提供者的实现之前,如果需要做一些参数验证.缓存.判断.小功能等等,满足要求再调用服务提供者的远程服务,则我们可以通过编写一个本地存根来实现这种功能. (1).在公共项目中或服务消费者项目 ...

  4. dubbo之本地存根

    本地存根 远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,比如:做 ThreadLocal 缓存,提前验证参数,调用失败后伪造容错数据等等,此时就需要在 ...

  5. dubbo本地服务化实现(dubbo三)

    一.dubbo服务化架构包含的内容 对于传统工程而言,分层的依据是按照包来区分.由于在相同的工程中,所以服务的提供和调用可以方便的实现. 但是对于分布式架构而言,服务的提供者负责服务具体的实现和接口规 ...

  6. 【Dubbo&&Zookeeper】5、dubbo总结和学习资料汇总

    Dubbo学习资料 阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访 RPC介绍 什么是RPC? RPC(Remote Procedure Call)远程过程调用.见名知意 - 从远程主机调用一个 ...

  7. 【Dubbo&&Zookeeper】1、Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)

    转自:http://blog.csdn.net/congcong68/article/details/41113239 互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架 ...

  8. dubbo 学习(5) dubbo多协议和多注册中心

    转载 http://blog.csdn.net/songjinbin/article/details/49498431 一.配置dubbo多协议模式 1.默认协议 Dubbo缺省协议采用单一长连接和N ...

  9. Dubbo学习笔记3:Dubbo管理控制台与监控中心的搭建

    Dubbo源码下载与编译 本文来讲下如何在Dubbo源码编译后,得到用于搭建管理控制台的war包和监控平台的jar包. 首先需要到Github上下载Dubbo的源码,解压后如下: 在dubbo-2.5 ...

随机推荐

  1. java中将科学技术发转为正常数据

    import java.text.NumberFormat; public class test { public static void main(String[] args) { double d ...

  2. vue点击按钮复制文本框内容

    1.npm进行安装 npm install clipboard --save 2.在需要使用的组件中import 引用方法:import Clipboard from 'clipboard'; 3.添 ...

  3. javaScript设计模式:发布订阅模式

    发布订阅模式的思想是在观察者模式的基础上演变而来,在观察者模式中客户端监听到对象某个行为就触发对应任务程序.而在发布订阅模式中依然基于这个核心思想,所以有时候也会将两者认为是同一种设计模式.它们的不同 ...

  4. Linux上安装RePlace

    RePlAce: Advancing Solution Quality and Routability Validation in Global Placement 项目地址 https://gith ...

  5. Leetcode541/151之String与char数组与StringBuffer

    String与char数组与StringBuffer 通常情况下遇到删除字符或者反转字符串时需要将String转为char数组或者StringBuffer String与char数组 char [] ...

  6. sourceCRT设置全局字符集为utf-8

    以前刚打开服务器crt字符集都会默认是default模式,搞得每次都要手动设置成UTF-8. 烦躁. 将CRT全局字符集设置成UTF-8格式方法: 设置窗口不会断掉: 即每100s发送一次ls \n ...

  7. JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了

    JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了 代码示例 转自 https://docs.oracle.com/javase/tutorial/jdbc/o ...

  8. 启动jar包的shell脚本

    在jar包的同级目录新建文件例如:app_jar.sh 然后填写如下内容: #!/bin/bash #source /etc/profile # Auth:Liucx # Please change ...

  9. SSM整合_年轻人的第一个增删改查_基础环境搭建

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  10. 2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed)

    2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed) [P2886 USACO07NOV]Cow Relays G - 洛谷 | 计算机科学教育新生 ...