通过iMock学习Jvmsandbox

Jvm-sandbox

  • Jvm-sandbox
    • 基于Jvm-sandbox的Mock平台iMock
      • iMock的工程学习
      • iMock怎么写的(sandbox的module应该怎么写)

Jvm-sandbox

Jvm-sandbox是阿里开源的一款java的沙箱,看网上的介绍在沙箱里你可以做你能想到的奇妙的事情。

基于Jvm-sandbox的Mock平台iMock

sandbox已经面世好久了,各个厂商之间也基于sandbox做了各自的能力,监控,测试,回放等等等等。
iMock是一个开源的Mock平台,由于基于sandbox,提供了方法级别的mock能力

iMock的工程学习

iMock分成了三部分 web,后台,插件
然后这部分学习重点学习插件部分

  • 前端web页面
  • 后端java的后台服务
  • 基于sandbox开发的插件
    主要学习sandbox的这个插件的开发思路。
    由于前端的与插件距离较远,我在看的过程中是结合后端的服务 & 插件的代码一起来看来了解的
    后端的结构:
    我习惯从Controller层去看
    后端的服务主要提供了三个Controller
    一个是日志信息相关的Controller
    一个是模块配置相关的Controller
    一个是模块信息相关的Controller
    通过内部提供的能力看、模块信息更像是与sandbox的agent交互的过程
    在这里插入图片描述
    那么在这个controller里面包含了哪些方法,这些方法又是如何对应到agent里面去的呢
    下图中提供了一系列的方法包含了激活mock方法,冻结mock方法,还有安装,看起来就像是与agent相关的
    在这里插入图片描述
    然后我们看一下激活的相关的方法的具体实现
    在这里插入图片描述
    这里走到了一个执行器,这个执行器应该就是包含了具体要怎么与agent进行交互的地方
    这个地方看起来在调用的过程中给定了三个参数:activeURI,params,还有一个枚举ACTIVE
    activeURI包含了哪些的内容:
private static String activeURI = "http://%s:%s/sandbox/default/module/http/sandbox-module-mgr/active?ids=mock"; 
//这个地方怎么用的,这个路径又是对应的谁
    // 这个地方来源于sandbox里的sandbox.shell 的sandbox_debug_curl的命令,这个地方声明了怎么使用http对sandbox进行操作
    // 格式应该为http://${host}:${port}/sandbox/${TARGET_NAMESPACE}/${1}
    // host: jvmsandbox所在的ip,port: jvmsandbox所在的端口,ids: 模块id,这里为mock, ${1}是模块的id
    // 那么对应的TARGET_NAMESPACE对应的应该是:有一个目标的命名空间,这个命名空间是default,那么对应的${TARGET_NAMESPACE}就是default
    // 这里用的http后面的sandbox-module-mgr,是因为要使用sandbox-modul-mgr提供的模块管理功能,这部分来源于与jvm-sandbox对接的地方

这个执行器里面又包含了什么
在这里插入图片描述
我们看到这个执行器从数据库中根据需要mock的相关应用的信息获取到了具体的module信息
之后,使用http的方式请求了上面描述的那个URI那这个URI又是啥呢
我们去看一下sandbox都提供了哪些的http接口,又是如何提供的。
这个时候我们发现,在整个iMock提供的接口里面并没有发现这个URI,那么一定是在实现这个sandbox的Module的时候引入了一些依赖包,里面包含了这些信息
我们去找找sandbox的源码里有没有这些信息
https://github.com/alibaba/jvm-sandbox
把sandbox的源码down下来看一下里面究竟有没给暴露这些内容出去
通过官方的例子,我们与sandbox进行attach的时候都用的是sandbox.sh文件暴露的端口,我们看看这个里面有什么东西,是否能够提供一些有效的思路。
果然在里面发现了一个方法名:sandbox_curl 而这个方法又引用了另一个方法:sandbox_debug_curl
而这个里面有个方法真的和我们拼出来的那个链接长得好像

curl -N -s "http://${host}:${port}/sandbox/${TARGET_NAMESPACE}/${1}" ||
    exit_on_err 1 "target JVM ${TARGET_JVM_PID} lose response."

那我们就来比对一把看看究竟是不是一样的,这些参数携带过来的能否一一的对应上呢
这个时候我们发现了一个 【TARGET_NAMESPACE】这个是个什么东西
我们在sandbox.sh文件中找到了这部分的描述
在这里插入图片描述
这里有个TARGET_NAMESPACE, 还有个DEFAULT_NAMESPACE这俩都是啥
我们继续找看到了sandbox.sh里面有这部分描述
在这里插入图片描述
看字面意思:如果我们在请求的时候携带了ARG_NAMESPACE这个参数那么使用ARG_NAMESPACE参数,如果没有携带,那么使用的就是DEFAULT_NAMESPACE,然后这个namespace默认又是default,所以我们在看一下请求的时候的链接,传过来的就是default,那么这个就是一个default了,也就是不论你有什么空间,iMock用的就是默认的空间。
然后呢后面参数我们能对应上吗
其实我们看一下sandbox_curl方法,这个是否能够对上勒

function sandbox_curl() {
  sandbox_debug_curl "module/http/${1}?1=1${2}"
}

这里在调用sandbox_debug_curl的时候,增加了module/http相关的内容,但是还缺少一部分我们没有找到:sandbox-module-mgr/active?ids=mock 他在sandbox里面
在这里插入图片描述
如果是active我们找到active命令的地方,这里找到了sandbox-module-mgr这个地方
在这里插入图片描述
定位到这里,这里是sandbox的模块管理的地方,那也就对了,是否激活mock的能力确实应该在这里
这里与sandbox的链路就被梳理清楚了。但是具体的写法呢

iMock怎么写的(sandbox的module应该怎么写)

看看sandbox的官方教程怎么写的:
模块的生命周期:链接: link
模块的编写方式:链接: link
对应到iMock的里面就是MockModule,实现了Module和Module LifeCycle的接口来控制Module的具体动作和生命周期
initialize则是初始化Mock信息的地方,在这里可以完成具体的Mock工作,因为这些信息都被保存在了数据库中,把这些信息读出来找到就可以实现这部分的能力了,具体就要看怎么设计这个Mock的能力了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/588696.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧旅游开启智慧生活,科技让旅行更轻松:通过智慧旅游,旅行者可以享受到更加便捷、高效的旅行服务,让旅行成为生活的一部分

一、引言 随着科技的飞速发展,我们生活的方方面面都在经历着前所未有的变革。旅游业作为服务业的重要组成部分,也在这场变革中迎来了前所未有的发展机遇。智慧旅游,作为科技与旅游深度融合的产物,正以其独特的魅力,引…

瑞_23种设计模式_解释器模式

文章目录 1 解释器模式(Interpreter Pattern)1.1 介绍1.2 概述1.2.1 文法(语法)规则1.2.2 抽象语法树 1.3 解释器模式的结构1.4 解释器模式的优缺点1.5 解释器模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代…

信息时代的智慧导航:高效搜索、信息筛选与信任构建的全面指南!

文章目录 一、高效搜索:快速定位目标信息的秘诀二、信息筛选:去伪存真,找到有价值的信息三、信任构建:深入了解与直接沟通《搜索之道:信息素养与终身学习的新引擎》亮点内容简介目录获取方式 随着科技的飞速发展&#…

小白总结uniapp微信小程序跨域问题的解决(前端)

前言:本人前端小白一枚,在B站听了一个很不错的视频,关于uniapp Vue3超详细教程,有需要的小伙伴可以去听,受益匪浅,下面是该博主的链接: gitee源码地址:https://gitee.com/qingnian8/…

windows 驱动开发-DMA技术(三)

在早期,是按照基于包或者基于流的方式来描述DMA的,不过这个描述可能不准确,故在Vista之后修改为使用数据包/使用公共缓冲区的系统DMA。 简单的解释一下基于包和基于流的说法的原因,数据包是指一个个基于一定大小的数据块&#xf…

Tensorflow2.0笔记 - ResNet实践

本笔记记录使用ResNet18网络结构,进行CIFAR100数据集的训练和验证。由于参数较多,训练时间会比较长,因此只跑了10个epoch,准确率还没有提升上去。 import os import time import tensorflow as tf from tensorflow import keras …

数据库和缓存一致性问题

hello,各位小伙伴们大家好,我是颜书凌,下面给大家讲解一下数据库和缓存的一致性问题,话不多说 1、一致性介绍 一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。 强一致性…

2024年【G3锅炉水处理】试题及解析及G3锅炉水处理模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年G3锅炉水处理试题及解析为正在备考G3锅炉水处理操作证的学员准备的理论考试专题,每个月更新的G3锅炉水处理模拟考试题祝您顺利通过G3锅炉水处理考试。 1、【多选题】在可逆反应中,下面哪…

Node.js -- express 框架

文章目录 1. express 使用2. 路由2.1 路由的使用2.2 获取请求报文参数2.3 获取路由参数2.4 路由参数练习 3. express 响应设置4. 中间件4.1 全局中间件4.2 路由中间件4.3 静态资源中间件 5. 获取请求体数据 body-parser6. 防盗链7. 路由模块化8. 模板引擎8.1 了解EJS8.2 列表渲…

面试二十四、继承多态

一、继承的本质和原理 组合(Composition): 组合是一种"有一个"的关系,表示一个类包含另一个类的对象作为其成员。这意味着一个类的对象包含另一个类的对象作为其一部分。组合关系通常表示强关联,被包含的对象…

【Week-Y7】使用自己的数据集训练YOLO-v8

文章目录 一、官方环境配置与测试1. 配置环境2. 用官方图片测试(图片下载失败)3. 用本地图片测试,检查配置的环境是否可用 二、使用自己的数据集进行训练测试1. 执行split_train_val.py文件2. 执行python .\voc_label.py文件3. 创建fruit.yam…

[Python基础知识]05函数和模块

一、函数的定义 格式:def 函数名(参数列表): 注: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。即使该函数不需要接收任何参数,也必须保留一对空的圆括号 函数形参不需要声明其类型&#x…

layui中禁用div标签等操作

为了实现点击表格行后触发事件 然后去触发后进行操作 页面流程操作设置规定 不可编辑直接添加属性 class"layui-disabled"如果在最大的 div 设置不可编辑 但是内部有些还是可以触发使用的 所以就重写一下 取到当前 div 下的 所有的子元素 然后在给所有的子元素…

闲话 ASP.NET Core 数据校验(二):FluentValidation 基本用法

前言 除了使用 ASP.NET Core 内置框架来校验数据,事实上,通过很多第三方框架校验数据,更具优势。 比如 FluentValidation,FluentValidation 是第三方的数据校验框架,具有许多优势,是开发人员首选的数据校验…

抢先体验:MacOS成功安装PHP8.4教程

根据官方消息,PHP 8.4将于2024年11月21日发布。它将通过三个 alpha 版本、三个 beta 版本和六个候选版本进行测试。 这次的重大更新将为PHP带来许多优化和强大的功能。我们很高兴能够引导您完成最有趣的更新升级,这些更改将使我们能够编写更好的代码并构…

解决React报错Encountered two children with the same key

当我们从map()方法返回的两个或两个以上的元素具有相同的key属性时,会产生"Encountered two children with the same key"错误。为了解决该错误,为每个元素的key属性提供独一无二的值,或者使用索引参数。 这里有个例子来展示错误是…

YOLOv8主要命令讲解

YOLOv8主要有三个常用命令,分别是:train(训练)、predict(预测)、export(转化模型格式),下面我将展开讲讲三个常用命令的常用参数与具体使用方法。 一、训练 通过自己标…

STM32单片机通过串口控制DDSM210 直驱伺服电机

1 电机介绍 官方资料:https://www.waveshare.net/wiki/DDSM210 DDSM210 直驱伺服电机是基于一体化开发理念,集外转子无刷电机、编码器、伺服驱动于一体的高可靠性永磁同步电动机,其结构紧凑,安装方便,运行稳定&#x…

react核心知识

1. 对 React 的理解、特性 React 是靠数据驱动视图改变的一种框架,它的核心驱动方法就是用其提供的 setState 方法设置 state 中的数据从而驱动存放在内存中的虚拟 DOM 树的更新 更新方法就是通过 React 的 Diff 算法比较旧虚拟 DOM 树和新虚拟 DOM 树之间的 Chan…

【PCL】教程 supervoxel_clustering执行超体聚类并可视化点云数据及其聚类结果

[done, 417.125 ms : 307200 points] Available dimensions: x y z rgba 源点云milk_cartoon_all_small_clorox.pcd > Loading point cloud... > Extracting supervoxels! Found 423 supervoxels > Getting supervoxel adjacency 这段代码主要是使用PCL(Po…