dubbo的端口地址和ip写在那_开源一款超实用的 Dubbo 测试工具,已用半年,感觉很有feel~...

54648a8f04ddc9528d329591f44e1492.png

不知道你是否在工作中有遇到过类似情况:

  • dubbo接口调试复杂,需要通过telnet命令或者通过consumer调用来触发。
  • telnet语句参数格式复杂,每次编写都要小心谨慎,一旦出错又需重来。
  • 复杂对象参数传参调用接口复杂,编写java api调用接口时间成本较高。

ac420a0bae8217f2e84e3c51bb3c56ef.png


上述这些坑我在工作中都有遇见过,发现大部分耗时都会卡在调用dubbo服务做自测的阶段,所以后来花费了写业余时间写了一款高效的dubbo测试工具开源给大家使用。

这款工具目前已在实际工作中应用半年多,基本功能已经成熟,后续依旧会进行版本维护。

相关的代码地址为:

https://gitee.com/IdeaHome_admin/dubbo-proxy-tools

ps: 如果大家喜欢,希望能给出一颗宝贵的star

关于如何部署本工具

下载了gitlab的代码之后,你会看到有两个文件包:iubbo-proxy和iubbo-proxy-web,它们分别正好对应了后端代码和前端代码。

578fb3c76e2d391bed7eb5258d782fc9.png

前端代码的部署

前端采用非常简单的vue技术,只需要将文件部署到一台nginx上边即可运作。
前端的默认访问页面是test-dubbo-web.html。

但是有两个小点需要改动下js配置

constants.js

这份文件里面编写了对应的请求server地址,这块是对应了后端服务的url。

1ff31353f5965995a0071442d9c6c14f.png


由于请求dubbo接口需要通过zk注册中心来拉去服务名列表,所以需要在iubbo.x.js里面的commonzk中做配置:

14881c2887342531737c7611e72d52c0.png


这里的host是一个别称,相当于一个key用于供前端展示,实际上传输给后端的是用ip这个值。

后端代码的部署

后端工程采用了springboot框架技术,核心的配置放在了application.properties里面:

server.port=7089
application.invoker.name=iubbo-invoker-proxyspring.datasource.druid.password=
spring.datasource.druid.username=
spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/iubbox-proxy
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Drivermybatis-plus.configuration.map-underscore-to-camel-case=truespring.redis.port=6379
spring.redis.host= 127.0.0.1

然后倒入建表的sql:

CREATE TABLE `t_dubbo_invoke_req_record` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_id` int(11) DEFAULT NULL COMMENT '用户id',`arg_json` varchar(2500) COLLATE utf8_bin DEFAULT NULL COMMENT 'dubbo请求参数',`create_time` datetime DEFAULT CURRENT_TIMESTAMP,`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;CREATE TABLE `t_user` (`id` int(9) NOT NULL AUTO_INCREMENT,`username` varchar(60) COLLATE utf8_bin DEFAULT NULL,`password` varchar(30) COLLATE utf8_bin DEFAULT NULL,`createTime` datetime DEFAULT CURRENT_TIMESTAMP,`updateTime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  • t_user 用于记录相关的用户账号,方便于保存用户账号信息。
  • t_dubbo_invoke_req_record 用于记录请求dubbo接口的用例信息。

最后就是启动入口类org.iubbo.proxy.DubboInvokerApplication

启动成功截图

67e9131d87bd77e655f9ebfac8ce3abb.png

关于本工具的使用教程

本工具区分了已登录账号和未登录账号两类角色,已登录账号的使用者可以对请求的用例进行保存,方便下一次提取信息,未登录账号虽然没有保存用例的功能,但是不影响其使用本工具进行测试。

首页截图:

92a8bdde9e7a564cea3000095cd00c41.png

1.指定zk地址

在测试dubbo接口之前,我们通常都会去拉取一遍zk上边的service地址,操作如下图:
先在文本框点击,输入和js配置有关的字母或数字会有模糊匹配的选项供各位选择:

afca4b78e0f7f6cf1d2156892472ac51.png


选中了zk地址之后,再去点击拉取zk地址按钮(以前有同事刚接触这个工具的时候,这里被绕蒙了~~)

拉取zk地址的时候,后端会根据文章上边提到的js配置里面的ip值去拉取,拉取成功会有相关提示:

c1351c6de6b6ca6d6ccaeb8ae20b6ed6.png

接下来便是筛选dubbo服务地址的功能,在拉取zk地址下方有一个下拉框,这里面此时应当会被注入zk上所有dubbo服务列表的名称。

8398473a09cb6eb2cc297103429704a3.png


选择对于的service名称,然后在右边的“请输入名称”文本框中输入该接口对应的方法名称(一定要名称对应)


这里以调用MsgService的sendMsg方法为例:

02470785a7c220cd89753a9a0e68e37a.png

然后配置相关的参数和名称


选择对应参数类型和值:

aff536e20eac62939ffd06e57b5492bd.png


最后发起请求:

a9424c1d0ba893e9d3653a0ac9dbff13.png


在基础参数配置项的旁边,还有一个模块是专门配置consumer端的额外内容,这些参数项都是在平时工作中可能会应用到的场景,需要的时候可以进行配置。这里面也配备了工作中非常常用的直连选项。

我个人最喜欢使用的还是直连功能,因为在开发过程中,经常需要直连机器做自测:

1c58ce74bd9792813d78ef9147748e89.png

假如说希望保存自己曾经发送过的dubbo测试用例,那么你只需先进行登录账号,账号直接往t_user表里面写入一条数据即可:

7826c70dd2409194db5f1819ad342b38.png


在首页的右上方有个进入登录页面按钮:

f0151e3a73682ea9850474f37cc85118.png


点击登录

497ad7b5ed025946e36a948167be70d7.png

如何保存请求用例:

6cff999f84fe79acf8d79d93fb203e1f.png


保存用例这里有些小瑕疵,需要用户手动刷新下页面才能显示保存的用例信息:

5d38c81dac76461de58117188f4159cc.png


点击选用参数,则页面又会重新回显之前使用过的请求信息。

特殊参数请求

该工具支持多种开发中常见的参数格式调用,目前支持常规参数

ps:注意这里的参数格式需要和dubbo方法里面的参数格式按照相同顺序相同类型做映射,否则后端程序会返回找不到对应方法

Java的常用基本类型数据:boolean,short,int,long,double,char,float

Java中常用的包装类数据:

java.lang.String,
java.lang.Integer,
java.lang.Object,
java.util.List,
java.lang.Class,
java.lang.Long,
java.lang.Boolean,
java.util.Map,
java.util.Date,
java.lang.Float,
java.lang.Double

对于简单的数据类型传递

9b185f8a3ace9eef0230f1eebc3acf8e.png

多参数,中英文混合传递

6c222909abf52b5c2681c855c05726d5.png

List类型参数的传递

45beb64d61dd3d3b0023d1bdc8dc5df0.png

Class类型的参数传递

1e6300219692458aca929a629b03c648.png

Map类型的参数传递

5c5c8e31f85223e3683856c65d79ae21.png

Date类型的参数传递

b57badf00acbe9d083488d2bc716b98b.png

自定义对象参数传参

如果在实际应用中遇到了这种场景,需要调用以下的接口,那么这个使用就需要使用自定义参数了:

f8e4cae48a57daeaf24726f049e99b83.png

31e999306419cefe400da1f8eb26eba7.png

6015e16ebbd4a8f06f74abd1233a70e5.png

复杂类型自定义参数传递

假设遇到了List类型参数,而且传输的List里面包含有自定义对象,例如下边这种类型:

List<UserDTO> testUserDtoList(List<UserDTO> userDTOList,Class clazz);

那么此时的传参案例可以像下边这样来写:

9a24f3d6c75c9d333a81ce27a185463a.png

易错点归纳

注意请求的参数顺序要和方法对应的参数顺序一致,假设服务的方法定义如下:

<T> List<T> getList(List<Long> var1, Class<T> var2);

那么传入的参数就必须先填List参数,再写Class参数。

  • 正确示例:(先写了List参数,再写Class参数)
  • 错误示例:(先写了Class参数,再写List参数)

作者:Java知音

原文链接:https://mp.weixin.qq.com/s/RczGYu9stYZbhUm6ON31pg

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[修复] Firemonkey 使用 DrawPath 断线问题(Android iOS 平台)

问题&#xff1a;使用 Canvas.DrawPath 绘制时&#xff0c;最后一点无法画到终点位置。&#xff08;这个问题要在粗线才能察觉&#xff09; 适用&#xff1a;Delphi 10 Seattle &#xff08;或更早的版本&#xff09; for Android & iOS 修复方法&#xff1a; 请将源码 FMX…

叠加卡片列表_使用PowerBI制作卡片图

如果要汇报重要的指标&#xff0c;比如超额完成的销售额、同比增长率等&#xff0c;不要把它埋没在图表里&#xff0c;用一个大大的数字自豪的展示它吧。卡片图&#xff0c;也被称为大数字磁贴&#xff0c;严格来说不能算是一种图表&#xff0c;只是仪表板的一个组件而已。在仪…

stringbuffer常用方法_第八讲:常用类库API

一、字符串操作---String类1、String可以表示一个字符串&#xff0c;不能被继承(最终类)不可变2、String类实际是使用字符数组存储的String类的两种赋值方式&#xff1a;(1)一种称为直接赋值、Java推荐使用第一种方式String name"小白"(2)通过关键字new调用String的构…

对应版本_Office 开发版本号与版本对应关系

Office从开发至今经历了非常多的版本&#xff0c;如office2000、office2003、office2007、office2010,office 2016到2019等等&#xff0c;那么大家知道吗&#xff1f;其实office还有开发版本号&#xff0c;可能很多用户不太熟悉&#xff0c;其实你打开office安装目录就可以明白…

筛选出一证多卡 用sql_对比Excel学习SQL(3):对列和行的操作

本文将从以下几个方面进行&#xff1a;一、对列的查询01 查询单个列03 查询所有列04 对列去重二、对列的值排序01 升序排列02 降序排列03 多个列排序三、对行的筛选01 单条件筛选02 多条件筛选03 IN命令04 LIKE命令正文&#xff1a;一、对列的查询Excel里对于一张表&#xff0c…

网络资产管理系统_固定资产管理系统网络版的各种语言翻译

固定资产管理系统网络版指的是固定资产管理系统项目的联网版本&#xff0c;适合需要远程操作及多人同时操作的用户&#xff0c;各个版本都提供相应的网络版。固定资产管理系统网络版系统稳定、功能强大&#xff0c;支持局域网内用户联网操作软件&#xff0c;适用于各机关企事业…

数据字典在sga的哪一个组件中缓存_非功能性约束之性能(1)-性能银弹:缓存...

在《什么是架构属性》一文中提到提高「性能」的主要方式是优化&#xff0c;而优化的其中一个主要手段就是添加缓存&#xff01;在软件工程里有这么一句话&#xff1a;「没有银弹」&#xff01;就是说由于软件工程的复杂性&#xff0c;没有任何一种技术或方法能解决所有问题&…

python热部署_关于Spring Cloud 框架热部署的方法

1、在对应的pom.xml 文件中添加依赖org.springframework.bootspring-boot-devtoolstrue2、注&#xff1a;project 中添加 spring-boot-maven-plugin,主要在eclipse中使用&#xff0c;idea中不需要添加此配置。【IDEA 忽略这个步骤哦(⊙o⊙)&#xff1f;】org.springframework.b…

html js css如何关联_会html+css+js就能把前端项目发布到多个平台

在这篇文章中&#xff0c;小编将给大家分享如何让自己的前端代码发布到多个常用的平台。看完这篇文章以后&#xff0c;你就知道了如何让你的前端代码发布到多个平台&#xff0c;如&#xff1a;安卓应用程序&#xff0c;小程序&#xff0c;iOS应用程序&#xff0c;Windows,Mac,L…

机器学习 监督学习论文_NeurIPS 2020最佳机器学习论文奖

NeurIPS 会议在提交的大量论文和1903年被接受的论文中&#xff0c;有3篇被授予。今年获奖的论文有&#xff1a;语言模型是学习者很少广义形式相关平衡的无悔学习动力学列子集选择和Nystrom方法的改进保证和多重下降曲线该NeurIPS委员会由一些指导准则。最好的论文必须具有革命性…

iis 装完framework4 7 无法切换_扫盲贴之电压并列与电压切换

点击上方电气小青年&#xff0c;关注并星标由于微信改版&#xff0c;只有星标才能及时看到我们的消息哦━━━━━━推荐阅读&#xff1a;《国内电气顶尖高校的奖学金介绍&#xff0c;总奖学金接近150万&#xff01;》《世界工业自动化公司行业前十名&#xff1a;西门子、ABB、…

unixbench类似_UnixBench的实现介绍-阿里云开发者社区

很多用户都用UnixBench做性能测试&#xff0c;并做厂商之间的对比&#xff0c;那UnixBench到底做了哪些性能测试&#xff0c;本篇从代码层面阐述UnixBench做了哪些测试。在细说UnixBench的实现之前&#xff0c;先放一个总结果UnixBench算分介绍有类似结果&#xff0c;然后一个个…

android 集成同一interface不同泛型_C# 基础知识系列- 10 反射和泛型(二)

0. 前言 这篇文章延续《C# 基础知识系列- 5 反射和泛型》&#xff0c;继续介绍C#在反射所开发的功能和做的努力。上一篇文章大概介绍了一下泛型和反射的一些基本内容&#xff0c;主要是通过获取对象的类型&#xff0c;然后通过这个类型对象操作对象。这一篇介绍一个在反射中很重…

hdu 1297 递推难题

这题的话&#xff0c;我能玩一年 今天做了很多递推的题&#xff0c;这题无疑是最复杂的 其实可以看出来,2,3,4,5为一类&#xff0c;不妨定义为2型&#xff0c;1&#xff0c;6为一类&#xff0c;定义为1型 规定num[i]为结尾是i的凹槽的数量 我们可以能轻易的推出 sum num[1]*2n…

mysql 8.0远程连接_安装mysql 8.0.17并配置远程访问的方法

一、安装前准备查看数据库版本命令&#xff1a; mysql --versionmysql-community-common-8.0.17-1.el7.x86_64.rpmmysql-community-libs-8.0.17-1.el7.x86_64.rpmmysql-community-client-8.0.17-1.el7.x86_64.rpmmysql-community-server-8.0.17-1.el7.x86_64.rpm二、安装RPM包依…

python体育竞技分析代码200行_使用Python进行体育竞技分析(预测球队成绩)

使用Python进行体育竞技分析&#xff08;预测球队成绩&#xff09; 发布时间&#xff1a;2020-09-18 06:38:27 来源&#xff1a;脚本之家 阅读&#xff1a;69 今天我们用python进行体育竞技分析&#xff0c;预测球队成绩 一. 体育竞技分析的IPO模式 &#xff1a; 输入I(input)&…

为什么有时优盘是只读模式_JS专题之严格模式

ECMAScript 5 引入了 strict mode ,现在已经被大多浏览器实现&#xff08;从IE10开始&#xff09;一、什么是严格模式顾名思义&#xff0c;JavaScript 严格模式就是让 JS 代码以更严格的模式执行&#xff0c;不允许可能会引发错误的代码执行。在正常模式下静默失败的代码&#…

mysql router 介绍_MySQL Router 介绍篇

MySQL Router 是什么&#xff1f;相信还有很多人没有听说过MySQL Router&#xff0c;很多人对它还不了解&#xff0c;在这篇文章里&#xff0c;将对MySQL Router进行一个简明介绍。首先&#xff0c;介绍一下MySQL Router推出的背景。MySQL Router 是一个轻量级的中间件&#xf…

react 更新input 默认值setfieldsvalue_值得收藏的React面试题

react1、什么是虚拟DOM&#xff1f;难度: ⭐虚拟 DOM (VDOM)是真实 DOM 在内存中的表示。UI 的表示形式保存在内存中&#xff0c;并与实际的 DOM 同步。这是一个发生在渲染函数被调用和元素在屏幕上显示之间的步骤&#xff0c;整个过程被称为调和。2、类组件和函数组件之间的区…

实验二Step1-有序顺序表

1 #include<stdio.h>2 3 struct job4 {5 char name[10];//作业名称6 char status;//当前状态7 int arrtime;//到达时间8 int reqtime;//要求服务时间9 int startime;//调度时间 10 int finitme;//完成时间 11 float TAtime,TAWtime;//周转时…