当前位置:首页 > 服务端 > Dubbo 实战 - Mock 调用

Dubbo 实战 - Mock 调用

2022年09月16日 13:36:46服务端4

前言

Dubbo 的 mock 特性既可以用作服务降级处理, 即当服务提供者出错时(抛出 RpcException),进行 mock 调用;同时也可以用于本地测试,用服务消费者端配置的 mock 服务替代要调用的远程服务,亦或者是对某个服务消费者屏蔽服务提供者,不让其进行远程调用。

下面通过举例说明 mock 的作用和使用方式,文中测试代码所使用的 Dubbo 版本为 2.7.7。本文会通过 xml 的方式进行配置。

另外,早期 dubbo 版本的 mock 功能可能有bug,或者功能不够完善。

正文

要使用 mock 功能,需要在服务消费端做一些配置。 可以通过指定 标签 mock 属性实现。

Dubbo 提供以下几种方式来使用Mock能力 :

假设我们现在有一个服务接口为:

package org.apache.dubbo.demo;

public interface DemoService {
     

    String sayHello(String name);
}

一、fail 策略

当服务消费者调用服务提供者失败后,会去执行配置的 mock 策略。 配置方式为 mock=“fail:策略” 或者 mock=“策略”。

具体策略如下:

1.1 mock=“true”

示例:

<dubbo:reference id="demoService" mock="true" interface="org.apache.dubbo.demo.DemoService"/>

<dubbo:reference id="demoService" mock="fail:true" interface="org.apache.dubbo.demo.DemoService"/>

指定 mock 策略为布尔类型,且为 true ,此时需要消费端提供服务接口的 mock 实现类,该类的包名需要与服务接口一致,且类名格式为 接口名 + Mock, 即 org.apache.dubbo.demo.DemoServiceMock, 当调用远程服务失败后, 就会执行 DemoServiceMock的 sayHello 方法, 如果不提供此 mock 类,dubbo 消费端会启动失败。

错误信息如下:

Caused by: java.lang.ClassNotFoundException: org.apache.dubbo.demo.DemoServiceMock

1.2 mock=“具体的mock实现类”

示例:

<dubbo:reference id="demoService" mock="org.apache.dubbo.demo.consumer.mock.DemoServiceMock2" interface="org.apache.dubbo.demo.DemoService"/>

<dubbo:reference id="demoService" mock="fail:org.apache.dubbo.demo.consumer.mock.DemoServiceMock2" interface="org.apache.dubbo.demo.DemoService"/>

指定 mock 策略为具体的 mock 实现类, 当调用远程服务失败时, 就会执行 mock 实现类的 sayHello 方法.

1.3 mock=“抛出自定义异常”

示例:

<dubbo:reference id="demoService" mock="throw org.apache.dubbo.demo.consumer.exception.CustomException" interface="org.apache.dubbo.demo.DemoService"/>

<dubbo:reference id="demoService" mock="fail:throw org.apache.dubbo.demo.consumer.exception.CustomException" interface="org.apache.dubbo.demo.DemoService"/>

指定 mock 策略为抛出自定义异常, 当远程服务调用失败后, 会给服务消费者抛出自定义异常.

1.4 mock=“返回 mock 数据”

示例:

<dubbo:reference id="demoService" mock="return haha" interface="org.apache.dubbo.demo.DemoService"/>

<dubbo:reference id="demoService" mock="fail:return haha" interface="org.apache.dubbo.demo.DemoService"/>

指定 mock 属性值为返回 mock 数据,当远程服务调用失败后,就会给服务消费者返回 haha。

二、force 策略

当服务消费者调用服务提供者时,会直接执行 mock 配置的策略,不会进行服务调用。

具体的策略跟 fail 策略一致, 此处不再详细说明。

2.1 mock=“force:true”

示例:

<dubbo:reference id="demoService" mock="force:true" interface="org.apache.dubbo.demo.DemoService"/>

2.2 mock=“force:返回mock数据”

示例:

<dubbo:reference id="demoService" mock="force:return xxx" interface="org.apache.dubbo.demo.DemoService"/>

2.3 mock=“force:抛出自定义异常”

示例:

<dubbo:reference id="demoService" mock="force:throw com.apache.dubbo.demo.XXXException" interface="org.apache.dubbo.demo.DemoService"/>

2.4 mock=“force: 执行Mock实现类”

示例:

<dubbo:reference id="demoService" mock="force:com.apache.dubbo.demo.DemoServiceMock2" interface="org.apache.dubbo.demo.DemoService"/>

总结

Dubbo 的 mock 的策略总共分为两大类:

一是当服务调用失败时,去进行 mock 调用;

二是绕过服务调用,直接进行 mock 调用。

而具体的 mock 调用策略又分别 4 种:

1、返回 mock 数据

2、抛出自定义异常

3、执行默认的 Mock 实现类

4、执行指定的 Mock 实现类

作者:nimo10050
来源链接:https://blog.csdn.net/cnm10050/article/details/109709478

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/41897.html

标签: Dubbo
分享给朋友:

“Dubbo 实战 - Mock 调用” 的相关文章

Dubbo原理浅析

Dubbo原理浅析

一、Dubbo是什么 百度百科(没有什么比度娘知道的更多):Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接...

SpringCloud、dubbo 和 druid 问题总结

SpringCloud、dubbo 和 druid 问题总结

背景:   我们当前的微服务架构采用的是 SpringCloud 全家桶 + dubbo + druid + apllo 等技术集成的。 1、多服务实例相同端口冲突问题   目前线上服务器内容动辄 128 ~ 256GB,我们一个服务最大内存设置不超过 32GB,那么...

Spring Boot Dubbo applications.properties 配置清单

Spring Boot Dubbo applications.properties 配置清单

摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 与其纠结,不如行动学习。Innovate ,And out execute ! 』 本文提纲 一、前言 二、applications.properti...

详解SpringMVC注解方式集成Dubbo

由于最近项目需要SpringMVC集成Dubbo,本文大概记录下详细集成过程: 一、首先项目中Maven引入Jar包 <!-- dubbo相关 --> <dependency> <gr...

maven+springmvc+dubbo+zookeeper

maven+springmvc+dubbo+zookeeper

springmvc+dubbo+zookeeper整合     为什么要用dubbo?   还是让官方来解释吧: http://d...

史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!

史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!

想往高处走,怎么能不懂 Dubbo? Dubbo是国内最出名的分布式服务框架,也是 Java 程序员必备的必会的框架之一。Dubbo 更是中高级面试过程中经常会问的技术,无论你是否用过,你都必须熟悉。 下面我为大家准备了一些 Dubbo 常见的的面...

70道Dubbo面试题及答案(最新整理)

70道Dubbo面试题及答案(最新整理)

Dubbo面试题及答案【最新版】Dubbo面试题大全(2021版),发现网上很多Dubbo面试题及答案整理都没有答案,所以花了很长时间搜集,本套Dubbo面试题大全 如果不背 Dubbo面试题的答案,肯定面试会挂! 这套Dubbo面试题大全,希望对大家有帮助哈...

SpringCloud系列之集成Dubbo应用篇

SpringCloud系列之集成Dubbo应用篇

目录 前言 项目版本 项目说明 集成Dubbo 2.6.x 新项目模块 老项目模块 集成Dubbo 2....

SpringCloud与Dubbo区别

为什么放弃Dubbo 使用SpringCloud?   相同点:SpringCloud 和Dubbo可以实现RPC远程调用框架,可以实现服务治理。   不同点:  SpringCloud是一套目前比较网站微服务框架了,整合了分...

SpringCloud采用Dubbo远程调用(SpringCloud Alibaba)

SpringCloud采用Dubbo远程调用(SpringCloud Alibaba)

系统架构:      这里只演示以下组件,其他组件的使用和SpringCloud一样     application-1 :应用1,模拟应用,提供http接口服务。     service-1 :微服务1,模拟微服务,提供dubbo接口服务。     se...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。