dubbo2.7 48 本地伪装
dubbo2.7 48 本地伪装
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
如何在 Dubbo 中利用本地伪装实现服务降级
背景
本地伪装 1 通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过 Mock 数据返回授权失败。
示例
在 spring 配置文件中按以下方式配置:
1 | <dubbo:reference interface="com.foo.BarService" mock="true" /> |
或
1 | <dubbo:reference interface="com.foo.BarService" mock="com.foo.BarServiceMock" /> |
在工程中提供 Mock 实现 2:
1 | package com.foo; |
如果服务的消费方经常需要 try-catch 捕获异常,如:
1 | Offer offer = null; |
请考虑改为 Mock 实现,并在 Mock 实现中 return null。如果只是想简单的忽略异常,在 2.0.11
以上版本可用:
1 | <dubbo:reference interface="com.foo.BarService" mock="return null" /> |
进阶用法
Return
使用 return
来返回一个字符串表示的对象,作为 Mock 的返回值。合法的字符串可以是:
- empty: 代表空,基本类型的默认值,或者集合类的空值
- null:
null
- true:
true
- false:
false
- JSON 格式: 反序列化 JSON 所得到的对象
Throw
使用 throw
来返回一个 Exception 对象,作为 Mock 的返回值。
当调用出错时,抛出一个默认的 RPCException:
1 | <dubbo:reference interface="com.foo.BarService" mock="throw" /> |
当调用出错时,抛出指定的 Exception:
1 | <dubbo:reference interface="com.foo.BarService" mock="throw com.foo.MockException" /> |
Force 和 Fail
在 2.6.6
以上的版本,可以开始在 Spring XML 配置文件中使用 fail:
和 force:
。force:
代表强制使用 Mock 行为,在这种情况下不会走远程调用。fail:
与默认行为一致,只有当远程调用发生错误时才使用 Mock 行为。force:
和 fail:
都支持与 throw
或者 return
组合使用。
强制返回指定值:
1 | <dubbo:reference interface="com.foo.BarService" mock="force:return fake" /> |
强制抛出指定异常:
1 | <dubbo:reference interface="com.foo.BarService" mock="force:throw com.foo.MockException" /> |
在方法级别配置 Mock
Mock 可以在方法级别上指定,假定 com.foo.BarService
上有好几个方法,我们可以单独为 sayHello()
方法指定 Mock 行为。具体配置如下所示,在本例中,只要 sayHello()
被调用到时,强制返回 “fake”:
1 | <dubbo:reference id="demoService" check="false" interface="com.foo.BarService"> |