关于java:Dubbo本地存根是什么Dubbo本地伪装又是什么

42次阅读

共计 2241 个字符,预计需要花费 6 分钟才能阅读完成。

真正的巨匠永远怀着一颗学徒的心
哈喽!大家好,我是小奇,一位程序员界的学徒
小奇打算以轻松风趣的对话形式来分享一些技术,如果你感觉通过小奇的文章学到了货色,那就给小奇一个赞吧
文章继续更新,能够微信搜寻【小奇 JAVA 面试】第一工夫浏览,回复【材料】更有我为大家筹备的福利哟!回复【我的项目】有我为大家筹备的一些我的项目源码。回复【简历模板】有我为大家筹备的简历模板。

@[TOC]


前言

书接上回,昨天打了一天游戏,我是一顿操作猛如虎、一看战绩 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 吧。

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

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

二、总结

这里的相干内容还没有整顿结束,文章前面继续更新,倡议珍藏。

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

如果感觉我的文章还不错的话就点个赞吧,另外能够微信搜寻【小奇 JAVA 面试】第一工夫浏览,回复【材料】更有我为大家筹备的福利哟!回复【我的项目】有我为大家筹备的一些我的项目源码。回复【简历模板】有我为大家筹备的简历模板。

正文完
 0