dubbo之mock模拟

2023-10-27

1:写在前面

考虑这样的场景,当服务提供者还没有开发完毕或者是因为某些原因无法启动时,会导致服务消费者方的停滞,此时为了能够正常的开发测试,可以使用mock功能,在服务消费者端提供一个服务接口的mock实现类,来模拟调用服务提供者正常获取结果,不同于stub 既支持在服务提供者端配置,也支持在服务消费者端配置,mock是假定服务提供者不可用的情况下产生的一种模拟机制,因此只能在服务消费者端配置使用。

2:实例

以下操作均在服务消费者端进行,因为我们假定的是没有可用的服务提供者端的情况。

2.1:定义服务接口

public interface MyMockService {
    String mockSayHi(String word);
}

2.2:xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!--当前项目在整个分布式架构里面的唯一名称,计算依赖关系的标签-->
    <dubbo:application name="dongshidaddy-consumer" owner="dongshidaddy"/>
    <!--点对点的方式-->
    <dubbo:registry address="zookeeper://192.168.10.119:2181" />
    <dubbo:reference id="myMockServiceInConsumerSide"
                     check="false"
                     interface="dongshi.daddy.service.MyMockService"/>

    <!--<bean class="dongshi.daddy.service.MyMockServiceMock"/>-->
</beans>

2.3:main

public class ConsumerWithMockMain {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer-with-mock.xml");
        context.start();
        MyMockService myMockService = (MyMockService) context.getBean("myMockServiceInConsumerSide");
        System.out.println(myMockService.mockSayHi("hello"));
    }
}

执行:

在这里插入图片描述

可以看到说找不到可用的服务提供者,这是正常的,因为我们根本就没有注册,我们继续向下看。

2.4:使用mock

在xml配置中增加mock=true,如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!--当前项目在整个分布式架构里面的唯一名称,计算依赖关系的标签-->
    <dubbo:application name="dongshidaddy-consumer" owner="dongshidaddy"/>
    <!--点对点的方式-->
    <dubbo:registry address="zookeeper://192.168.10.119:2181" />
    <dubbo:reference id="myMockServiceInConsumerSide"
                     check="false"
                     mock="true"
                     interface="dongshi.daddy.service.MyMockService"/>

    <!--<bean class="dongshi.daddy.service.MyMockServiceMock"/>-->
</beans>

注意这里在dubbo:reference中设置check=“false”,因为不设置的话会检测服务提供者端是否可用,因为不可用,会直接异常,到不了mock那一步。

再次执行main:

在这里插入图片描述

此时报找不到XxxxMock类的错误,因为打开mock后会默认以接口名+Mock拼接的方式来查找mock的实现类,因此只需要提供mock实现类就可以了,继续向下看。

2.5:mock实现

public class MyMockServiceMock implements MyMockService {
    @Override
    public String mockSayHi(String word) {
        return "mock impl in consumer side: " + word;
    }
}

再次执行:

在这里插入图片描述

可以看到,先报错说找不到对应的service,然后执行了mock逻辑。

3:写在后面

参考文章列表:

dubbo的Mock功能与源码实现

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dubbo之mock模拟 的相关文章

  • qt采用opengl显示yuv视频数据

    作者 使徒保罗 邮箱 297329588szh 163 com 声明 欢迎交流学习 如有任何疑问 请通过邮箱联系本人 应用场景 qt opengl渲染yuv420p数据 开发环境 win7 64位 qt opensource windows
  • WEB-CTF通关教程二

    信息泄露的第二关 进去页面如下 查看源代码发现后缀为 sql的文件 看见这个文件思路就是把这个文件下载下来查看敏感数据 尝试在链接后直接加文件名 发现直接下载了我们的文件 使用记事本打开文件 得到flag值 暴力破解第二关 打开页面提示如下

随机推荐

  • 将手机号中间四位进行隐藏操作(Java)

    import java util Scanner public class StringExample2 public static void main String args 将手机号中间四位数字用 来替代 用截取字符串的方法 将前三位和
  • 有点问题的代码

    一个有问题的程序 import javax swing import java awt event import java awt class EditBook public static void main String args Edi
  • 详解 http-server的安装和使用

    简介 http server 命令行http服务器 http server是一个简单的零配置命令行http服务器 它足够强大 足以用于生产用途 但它既简单又易于破解 可用于测试 本地开发和学习 使用前提 http server 基于node
  • Android:位置服务

    前言 在开发 Android 位置相关应用时 可以从 GPS 全球定位系统 passive network 获取用户位置 通过 GPS 能获得最精确的信息 LocationProvider 是位置源的意思 用来提供定位信息 常用的 Loca
  • Apriori算法是什么?适用于什么情境?

    Apriori适用于什么场景 Apriori算法是常用的用于挖掘出数据关联规则的算法 它用来找出数据值中频繁出现的数据集合 找出这些集合的模式有助于我们做一些决策 例如什么商品集合顾客会在同一次购物中购买 最著名的例子莫过于啤酒与尿布的故事
  • Android蓝牙开发的一些经验

    http blog csdn net icyfox bupt article details 25487125 先说一下背景 我是开发手机与带蓝牙的智能设备 蓝牙血压计 血糖仪 手环等 设备对接的APP 也就是说 在设备端没有什么可以操作的
  • 面试官:我就问了一个JVM性能调优,没想到他能吹半个小时

    一 JVM内存模型及垃圾收集算法 1 根据Java虚拟机规范 JVM将内存划分为 New 年轻代 Tenured 年老代 永久代 Perm 其中New和Tenured属于堆内存 堆内存会从JVM启动参数 Xmx 3G 指定的内存中分配 Pe
  • 迟来的函数传参补充——传引用【引用调用】【c++】

    文章目录 1 传引用 1 1 特点 1 2 使用 1 2 1 一般引用 1 2 2 常量引用 1 3 案例 1 3 1 常见变量引用做函数参数 1 3 2 结构体引用做函数参数 1 传引用 函数传参 几乎一直在用简单的值传递 或者传指针 前
  • Selenium浏览器自动化测试框架简单介绍

    目录 selenium简介 介绍 功能 优势 基本使用 获取单节点 获取多节点 节点交互 动作链 执行JavaScript代码 获取节点信息 切换frame 延时等待 前进和后退 cookies 选项卡管理 异常处理 选项卡切换 无头浏览器
  • Python--类及其方法

    Python 类及其方法 文章目录 Python 类及其方法 前言 一 类的定义 二 继承类定义 二 类的专业方法 前言 在 Python 中 面向对象编程主要有两个主题 就是类和类实例 类与实例 类与实例相互关联着 类是对象的定义 而实例
  • React怎样在非组件环境下拿到路由信息实现路由跳转

    最近写项目的时候遇到一个问题 如图所示 用户token失效后 页面需要跳转回登录页面 用location href直接赋值会导致页面刷新 对SPA来说是可耻的 而且location href跳转的时候 页面并没有提示信息出现就直接跳转了 然
  • 微信小程序——flex布局

    flex布局的基本知识 flex布局作用于父容器之上 用于控制其子盒子的位置和排列的方式 flex是Flexible Box的缩写 意为 弹性布局 用来为盒状模型提供最大的灵活性 任何一个容器都可以指定为Flex布局 box display
  • 应用层概述、基本原理

    网络应用体系结构 客户机 服务器结构 Client Server C S 点对点结构 peer to peer P2P 混合结构 Hybrid 1 客户机 服务器结构 服务器 7 24小时提供服务 永久性访问地址 域名 利用大量服务器实现可
  • aix安装bff_在AIX中安装与维护软件

    学习内容 在 AIX 中安装与维护软件 学习目标 1 了解安装软件包的含义及命名规则 2 了解 AIX 如何发布补丁 知道自己的 AIX 及已安装软件的版本情况 3 知道如何安装与管理软件及升级 4 会修复损坏的软件 5 知道如何通过 Fi
  • Linux/Windows中根据端口号关闭进程及关闭Java进程

    目录 Linux 根据端口号关闭进程 关闭Java服务进程 Windows 根据端口号关闭进程 Linux 根据端口号关闭进程 第一步 根据端口号查询进程PID 可使用如下命令 netstat anp grep 8088 以8088端口号为
  • java判空方式

    java判空方式 1 数据结构判空 map list set CollectionUtils isEmpty 为空 CollectionUtils isNotEmpty 不为空 2 对象判空 Objects isNull 为空 Object
  • IPv6你知道多少?

    IPv6是什么 互联网协议 IP 地址是分配给连接到互联网的每个设备的数字标识符 从广义上讲 IP地址允许设备相互通信并交换信息 Internet协议版本4 IPv4 于1983年发布 至今仍用于大多数Internet通信 IPv4地址使用
  • MongoDB.WebIDE:升级版的Mongodb管理工具

    很早以前收藏了一片文章 强大的MongoDB数据库管理工具 最近刚好要做一些MongoDB方面的工作 于是翻出来温习了一下 用起来也确实挺方便 不过在使用过程中出现了一些个问题 加上更喜欢MongoUVE的操作习惯 于是决定 自己动手 丰衣
  • Java之object和string的理解

    Java之object和string的理解 文章链接http blog csdn net qq 16628781 article details 65036244 知识点 栈区 堆区和方法区 object类clone 和qeuales 方法
  • dubbo之mock模拟

    1 写在前面 考虑这样的场景 当服务提供者还没有开发完毕或者是因为某些原因无法启动时 会导致服务消费者方的停滞 此时为了能够正常的开发测试 可以使用mock功能 在服务消费者端提供一个服务接口的mock实现类 来模拟调用服务提供者正常获取结