Dubbo服务接口测试工具

背景

       随着业务的发展,业务越来越复杂,为了提高系统性能,对业务解耦,对系统按业务模块拆分;服务之间的治理(SOA)、远程服务调用(RPC),组成复杂的网状的分布式系统。用户的访问的(pc,h5,android,ios等前端)页面并没有对业务系统暴露的接口服务全面的测试,存在潜在风险,为此写了一个远程服务接口测试的DEMO (DUBBO服务为例)

应用场景

  1. 大型的分布式系统
  2. 前端和后台服务端分离
  3. 业务系统内部通过订阅服务,互相调用接口进行访问,非传统http/https

技术实现

1.使用技术

  1. 类加载器-加载需要dubbo服务接口jar
  2. 动态代理-订阅消费者服务;调用订阅服务的方法
  3. 反射-获取类的方法及参数信息
  4. 反序列化-fastJson实现对象序列化,反序列化
  5. 缓存-jvm缓存消费者服务,方法参数等信息,本地文件缓存页面请求参数信息

2.类加载器加载订阅服务的jar或者订阅服务jar的目录

3.订阅消费服务

 人工订阅返回动态代理消费者服务并缓存

4.消费服务方法封装

反射获取对象方法及参数信息

5.方法请求参数类型转换

将请求参数转换成方法对应的数据类型

6.代理执行方法

获取订阅消费者服务,代理调用具体要访问的方法

7.查看类加载器加载的所有jar

8.复制响应结果

9.效果显示

1.启动:DubboMain.main主函数

2.订阅服务

自动加载填充方法列表

3.调用Dubbo接口

注:多个请求参数对象用“;”分割,请求参数内容不能含有“;”

4.结果展示

5.功能菜单说明

导入JAE地址:是类加载器需要订阅消费服务的jar和目录,可输入或者点击“导入jar”选在目录和jar

注册中心:是指zookeeper注册中心

订阅服务:要调用dubbo的消费者服务ClassPath

订阅版本:暴露服务的版本号

订阅服务按钮:会订阅服务并初始化消费者方法信息

调用接口:调用消费者方法

复制请求:会将左侧请求域的内容复制到剪切板

复制结果:会将右侧响应域的内容复制到剪切板

JSON格式化:会将左侧请求域数据JSON格式化后在右侧响应域显示,必需是JSON格式

JAR类加载:会把当前客户端AppClassLoader加载器加载的所有jar显示在右侧响应域

核心类及方法解释说明

fills.tools.dubbo.CustomerDubboService-订阅服务

1.fills.tools.dubbo.CustomerDubboService.getCustomerDubboService(String, Class, String, String)

/**

 * 订阅消费者服务

 * @param zk 注册中心

 * @param c3 订阅服务的反射对象

 * @param ver 注册版本

 * @param key 缓存key

 * @return Object 订阅消费之服务

 * @throws Exception

 */

2.fills.tools.dubbo.CustomerDubboService.getDubboServiceMethods(Class)

/**

 *

 * @Function: CustomerDubboService.java

 * @Description: 封装方法参数并缓存JVM

 *

 * @param: c3 订阅服务的反射对象

 * @param:

 * @return:List<Map<String,String>>

 *

 *

 */

fills.tools.dubbo.CustomerDubboCache-缓存订阅服务

1.fills.tools.dubbo.CustomerDubboCache.setCustomerDubbo(String, Object)

/**

 * 缓存消费者服务JVM缓存

 * @param key 缓存key

 * @param obj 消费者服务

 */

2.fills.tools.dubbo.CustomerDubboCache.getCustomerDubbo(String)

/**

 * 从JVM缓存获取消费者服务

 * @param key 缓存key

 * @return Object 消费者服务

 */

fills.tools.dubbo.MethodCache-缓存反射对象方法信息

1.fills.tools.dubbo.MethodCache.setMethod(String, Class)

/**

 *

 * @Function: MethodCache.java

 * @Description: 将反射对象的方法缓存至JVM

 *

 * @param: key 缓存key

 * @param: c3 订阅服务的反射对象

 * @return:void

 *

 */

2.fills.tools.dubbo.MethodCache.getMethod(String)

/**

 * 获取方法

 * @param key 缓存key

 * @return Method

 */

fills.tools.dubbo.MethodParamsTypeChange-调用方法的数据类型转换

1.fills.tools.dubbo.MethodParamsTypeChange.dataTypeChange(String[], Parameter[])

/**

 *

 * @Function: MethodParamsTypeChange.java

 * @Description: 请求域的请求参数数据类型转换消费者服务方法的对象

 *

 * @param: params 请求域参数

 * @param: paramsArr Method对应的参数数据类型

 * @return:Object[]  Method方法对应的参数结果

 *

 */

fills.tools.dubbo.MethodProxy 调用方法代理类

1.fills.tools.dubbo.MethodProxy.proxy(Object, Method, Object[])

/**

 *

 * @Function: MethodProxy.java

 * @Description: 执行代理方法

 *

 * @param: obj 订阅服务代理类对象

 * @param: methods 调用的方法对象

 * @param: params 调用方法对象的参数

 * @return:Object 返回调用结果

 */

fills.tools.java.ClassLoaderUtil 类加载器

1.fills.tools.java.ClassLoaderUtil.addJar(File)

/**

 *

 * @Function: ClassLoaderUtil.java

 * @Description: 加载新的jar或者jar目录

 *

 * @param: file 加载新的jar或者jar目录的文件

 * @return:void

 */

2.fills.tools.java.ClassLoaderUtil.addJar(URL[])

/**

 * 加载jar的URL至类加载器

 * @Function: ClassLoaderUtil.java

 * @Description: 加载新的jar转换成URL

 *

 * @param: urls jar路径的URLS

 * @return:void

 */

3.fills.tools.java.ClassLoaderUtil.getClass(String, String)

/**

 * 如果第一次反射,报错提示嘞不存在,会加载jarPath至加载器,再次发射获取对象

 * @Function: ClassLoaderUtil.java

 * @Description: 通过反射获取类Class

 *

 * @param: classPath 反射对象的地址

 * @param: jarPath  待加载类的地址

 * @return:Class<?> 反射对象

 */

4.fills.tools.java.ClassLoaderUtil.getClass(String)

/**

 *

 * @Function: ClassLoaderUtil.java

 * @Description: 通过反射获取类Class

 *

 * @param: classPath

 * @return:Class<?>

 */

5.fills.tools.java.ClassLoaderUtil.getClassLoader()

/**

 *

 * @Function: ClassLoaderUtil.java

 * @Description: 获取加载器当前加载jar列表信息

 *

 * @param:@return

 * @return:List<String> 加载Jar列表地址信息

 */

fills.tools.jna.ToolkitUtil-剪切板工具

1.fills.tools.jna.ToolkitUtil.setContents(Object)

/**

 *

 * @Function: ToolkitUtil.java

 * @Description: contents赋值剪切板

 *

 * @param: contents 复制内容

 * @return:void

 */

执行exe

注:支持windows,jdk1.8环境

dubbo测试工具exe启动工具

源码包

dubbo接口测试工具源码

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值