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

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

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


前言

书接上回,昨天打了一天游戏,我是一顿操作猛如虎、一看战绩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. MongoDB从bson文件中恢复数据

    首先需要到mangodb的安装目录的bin下面找到mongorestore.exe WIN10系统MongoDB安装目录bin文件夹下没有mongorestore.exe 先下载工具  https:/ ...

  2. Blazor 国际化多语言界面 (I18nText )

    在实际使用中,我们经常会遇到需要把程序界面多种语言切换,适应不同地区使用者的需求,本文介绍一个我初学Blazor接触到的库,边撸边讲解. 包名: Toolbelt.Blazor.I18nText ht ...

  3. java实现MD5文件加密

    package me.zhengjie.modules.logdump.util; import java.io.FileInputStream; import java.io.IOException ...

  4. linux mysql授权远程连接,创建用户等

    1.进入mysql 2.此命令是为密码为 root .IP(%)任意的 root 用户授权.(*.* 表示数据库.表,to后为root用户:%:模糊查询,所有 IP 都可以,可指定其他主机 IP:by ...

  5. Hyperledger Fabric定制联盟链网络工程实践

    总体来看,网络上成体系的可用的 Fabric 教程极少--不是直接在 Fabric 官网复制内容大谈基础理论就是在描述一个几乎无法复现的项目实践,以至于学习 Fabric 的效率极低,印象最深刻的就是 ...

  6. 使用IntelliJ IDEA创建Java项目

    准备: Intelliyu IDEA 下载好JDK1.8 方法一: 方法二

  7. 1.Docker容器学习之新生入门必备基础知识

    0x00 Docker 快速入门 1.基础介绍 描述:Docker [ˈdɑ:kə(r)] 是一个基于Go语言开发实现的遵循Apache 2.0协议开源项目,目标是实现轻量级的操作系统虚拟化解决方案: ...

  8. JavaWeb入门day9-随笔(session/cookie)

    会话 一个网站怎么证明用户访问过 服务端给客户端一个信件,客户端下次访问服务端带上信件就可以:cookie 服务器登记,下次访问匹配:session 保存会话的技术 cookie 客户端技术(响应.请 ...

  9. Linux下快速拷贝单个大文件的秘诀

    #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <stdlib.h> ...

  10. python基础-基本数据类型(三)

    一.散列类型 散列类型用来表示无序的集合类型 1.集合(set) Python中的集合与数学符号中的集合类似,都是用来表示无序不重复元素的集合. 1.1 集合的定义 集合使用一对{}来进行定义,集合中 ...