1、Dubbo介绍

(1)Dubbo说明

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

简单的说:Dubbo一个高性能的,基于 Java 的,开源 RPC 框架。所以严格来说,Dubbo不是协议,而是一种分布式服务框架。

(2)Dubbo运行原理

Dubbo架构图如下所示:

节点角色说明:

  • Provider:暴露服务的服务提供方。
  • Consumer:调用远程服务的服务消费方。
  • Registry:服务注册与发现的注册中心。
  • Monitor:统计服务的调用次数和调用时间的监控中心。
  • Container:服务运行的容器。

调用关系说明:

  1. 运行服务的容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

对上图进行说明:

  • 虚线都是异步访问,实线都是同步访问。
  • 紫色虚线:在启动时完成的功能。
  • 青色虚线(实线):都是程序运行过程中执行的功能。
  • 所有的角色都是可以在单独的服务器上。

Dubbo简单的运行原理图:

2、准备测试Dubbo接口的环境

需要下载JMeter的Dubbo依赖JAR包,根据你Dubbo服务的版本,去选择对应的插件版本。

例如:我的Dubbo是2.3.7版本,我需要的是jmeter-plugins-dubbo-2.7.1-jar-with-dependencies.jar。下载后放到JMeter安装目录中的lib/ext路径下。

各版本下载地址:Releases · thubbo/jmeter-plugins-for-apache-dubbo · GitHub

注意:如果放依赖包之前就已经启动了JMeter的话,需要重启JMeter。

之后我就可以使用JMeter中的取样器元件,来发送支持Dubbo协议的请求。

如下图所示:

说明:

我们在下载Dubbo的JAR包时候,会看到有两个JAR包:

  • Jmeter-plugins-dubbo-2.7.1-jar-with-dependencies.jar
  • Jmeter-plugins-dubbo-2.7.1.jar

如果使用的是:jmeter-plugins-dubbo-${version}-jar-with-dependencies.jar

此包中已含必要的依赖,推荐使用这个包。

如果使用的是:jmeter-plugins-dubbo-${version}.jar

需要自行添加插件的依赖包,所依赖JAR包的列表如下:

  • dubbo-2.5.3.jar
  • javassist-3.15.0-GA.jar
  • zookeeper-3.4.6.jar
  • zkclient-0.1.jar
  • jline-0.9.94.jar
  • netty-3.7.0-Final.jar
  • slf4j-api-1.7.5.jar
  • log4j-over-slf4j-1.7.5.jar

3、Dubbo Sample界面详解

Dubbo Sample组件添加方式:选中“线程组”右键 —> 添加 —> 取样器 —> Dubbo Sample

界面如下图所示:

针对界面中各选项说明:

  • 名称Dubbo Sample组件的自定义名称,见名知意最好。
  • 注释:即添加一些备注信息,对该Dubbo Sample组件的简短说明,以便后期回顾时查看。

(1)Registry Settings:注册设置

  • Protocol:注册协议,包括zookeepermulticastRedissimplenone
  • Address:输入Dubbo注册地址,注册中心的IP+Port
    1、当使用zookeeperAddress填入zookeeper地址,集群地址使用","分隔;
    2、当使用Dubbo直连的方式,Address填写直连地址和服务端口,且注册协议填none
  • Group:组类型,如果有的话,根据配置填写即可;
  • Get Provider List:根据Address填写的地址,获取服务提供者的服务列表。(直连可以不选,其他都要选)
    1)点击Get Provider List后,会稍许有点卡。如果输入的Address填写不对,会卡死。
    2)根据实际情况选择Interfaces(接口)和Methods(方法)。

(2)RPC Protocol Settings:RPC协议设置

Protocol:使用的Dubbo协议,包括dubbormihessianwebservicememcachedredis,根据自己的协议类型,选择对应的选项即可。

(3)Consumer&Service Settings:消费者和提供者设置

  • Timeout:请求接口超时时间,单位ms,根据Dubbo具体配置填写;
  • Version:版本,Dubbo不同版本之间差异较大,不同版本之间不能互相调用,这里指定Dubbo版本,是为了方便识别和说明;(一般无需填写)
  • Retries:异常重试次数。类似这种分布式服务通信框架,大多都有重试机制,是为了保证事务成功率;
  • Cluster:集群类型,包括failoverfailfastfailsafefailbackfailking
  • Group:组类型,如果有的话,根据配置填写即可;
  • Connections:连接数,同上,根据配置填写;
  • Async:服务处理类型,包括sync(同步)、async(异步),根据配置填写;(现在都默认选择sync同步,目前所示样例都是同步接口)
  • Loadbalance:负载均衡策略,包括random(随机)、roundrobin(轮询)、leastactive(最少活跃数)、consistenthash(一致性哈希);

Jmeter高级性能测试实战https://edu.csdn.net/course/detail/35834

(4)Interface Settings:接口设置

  • Interface:填写要请求的接口名。因为Dubbo服务大多是开发根据规范自行命名的,因此这里需要填写完整的接口名+包名;(如果选择了上面的Get Provider List,则无需填写,会自动回填)
  • Method:当前接口下的方法名,按照开发提供的API文档填写即可;(如果选择了上面的Get Provider List,则无需填写,会自动回填)
  • Args:接口参数,根据API文档填写,输入对应的参数类型和参数值即可;
    1)paramType:参数支持任何类型,可以直接使用java.lang下的包装类,如:intfloatshotdoublelongbytebooleancharString等。
    类型也可以是自定义对象POJO,需使用类的完全名称。
    2)paramValue:填写需要的参数值,例如:int为1,booleantrue等,自定义类与List或者Map等使用Json格式数据。

4、Dubbo Sample组件的使用

(1)测试计划内包含的元件

添加元件操作步骤

  1. 创建测试计划。
  2. 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
  3. 在线程组中,添加取样器Dubbo Sample组件:选中“线程组”右键 —> 添加 —> 取样器 —> Dubbo Sample
  4. 在线程组中,添加监听器“察看结果树”组件:选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树

最终测试计划中的元件如下:

提示:下面介绍两种方式,来请求Dubbo 服务。

(2)使用zookeeper协议请求Dubbo接口

1)使用zookeeper协议调用Dubbo服务步骤

  1. 先获取zookeeper注册中心的地址,因为Dubbo服务都注册在这里。
  2. 点击Get Provider List按钮,可以获得提供者的所提供服务的列表。
  3. 选择要请求的接口与方法。
  4. 填入对应的参数,发送请求。

2)Dubbo接口信息说明

  1. 接口:com.example.provider.service.HelloFroParameterService:1.0.0
  2. 方法名:sayHelloFroParameter
  3. 参数类型:String,如果是自定义对象,填写对象的全名。
  4. 参数值:字符串就行。

填写好的Dubbo Sample请求内容,如下图所示:

提示:其他选项我们暂时不用填写。

3)补充说明

当点击Get Provider List按钮之后,会出现如下提示信息:

意思是:获取所有提供者的服务列表,可能会导致 JMeter 停止响应几秒钟。 你要继续吗?

我们点击是即可。

然后停顿一会,会出现如下提示:

意思是:提示你,获取提供者列表以完成! 检查日志是否有错误。

这就证明我们获得提供者列表成功了。

提示:

如果10秒中都没有出现如上弹框,证明列表获取失败,可能是zookeeper地址填写错误,也可以能是服务有问题了。

而此时JMeter界面是卡死状态,我们就需要强制关闭掉JMeter了,因为等再长时间也没有意义了。

获取到提供者列表后,在InterfacesMethods的下拉列表中就有内容了,我们可以选择需要调用的接口和方法。

同时选择好的接口和方法,会同步到下面Interface Settings中的接口和方法的设置中。

如下图所示:

4)运行查看结果

运行脚本,查看结果。

我们可以看到,成功请求了Dubbo接口,并接收到了返回的数据。

如下图所示:

3)使用直连的方式请求Dubbo接口

直连方式与zookeeper连接方式不同,不需要到注册中心去分配一个提供者来提供服务,我们是直接链接某个提供者,去进行请求。

1)使用直连方式调用Dubbo服务步骤

  1. Protocol协议选择none
  2. Dubbo接口填写直连地址:如:127.0.0.1:20880
  3. 填写接口地址:com.example.provider.service.HelloService:1.0.0
  4. 填写调用的方法名:sayHello
  5. 请求一个不带参数的Dubbo接口,所以不需要填写参数。

编辑完成,如下图所示:

2)运行查看结果

我们可以看到,成功请求了Dubbo接口,并接收到了返回的数据。

如下图所示:

以上就完成了JMeter对Dubbo接口的访问。Jmeter高级性能测试实战https://edu.csdn.net/course/detail/35834

如何使用JMeter 对Dubbo接口进行测试相关推荐

  1. Jmeter之dubbo接口性能测试

    一.Dubbo简介 dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 二.Dubbo接口测试方案 方法:使用jmeter测试dubbo接口 1 ...

  2. 使用jmeter进行api接口压力测试

    前言 压力测试的工具挺多的,但看了其他人的文章介绍,还是选了jmeter,开源.免费啊, 下载 下载地址: https://jmeter.apache.org/download_jmeter.cgi ...

  3. Jmeter验证码注册接口压力测试实战

    主要学习的内容包括发送HTTP请求.HTTP信息头管理器.HTTP cookies管理器.用户定义的变量.响应断言.CSV数据文件设置的使用. 测试网址及测试接口等说明 提供的测试网址为: http: ...

  4. dubbo接口快速测试技巧

    在分布式系统的开发中,用到了dubbo+zookeeper技术,最近遇到一个问题,产品上线后,我负责的模块出了问题,某个bean中某个字段的值一直为null,而这个bean是我调用注册在zookeep ...

  5. Jmeter dubbo插件测试dubbo接口

    一.背景 对于如何使用Jmeter测试http接口,大家都已经比较熟悉,网上相关的知识也很多.但随着微服务越来越流行,仅仅会测试http接口已经远远不够.Dubbo作为当下非常流行的RPC接口,学习如 ...

  6. dubbo接口测试_Django测试工具平台之Dubbo接口请求 + 前端

    前言 本章内容主要完成以下几个内容: 1.记录Dubbo接口请求 2.搜索请求记录 3.前端页面完成 4.项目第一阶段展示 项目展示中主要演示在本地如何启动项目,进行调试.如果需要部署线上环境,可以去 ...

  7. 如何使用Jmeter对HTTP接口进行压力测试?

    我们不应该仅仅局限于某一种工具,性能测试能使用的工具非常多,选择适合的就是最好的.笔者已经使用Loadrunner进行多年的项目性能测试实战经验,也算略有小成,任何性能测试(如压力测试.负载测试.疲劳 ...

  8. Jmeter验证码图片识别注册接口压力测试实战

    写在前面 前段时间写了一篇博文<Jmeter验证码注册接口压力测试实战>,前两天又登录对应的网站看了一下.发现原来滑动验证的方式改成了图片验证码的方式,防止用户多次发送手机验证码. 看到这 ...

  9. Python结合telnet命令实现自动化测试dubbo接口

    欢迎关注[无量测试之道]公众号,回复[领取资源], Python编程学习资源干货. Python+Appium框架APP的UI自动化. Python+Selenium框架Web的UI自动化. Pyth ...

最新文章

  1. EntLib 3.1学习笔记(6) : Security Application Block
  2. Redis Scan命令
  3. 安装RVDS2.2破解版
  4. python 延时_理解Python多线程5:加锁解决问题,但又带来麻烦!
  5. python中for循环运行不起_python中for循环不能正常工作
  6. FD.io VPP 使用场景-用例
  7. 10 个牛逼的一行代码就能搞定的编程技巧,你会用吗?
  8. 计算机编程算法和数学有什么关系?
  9. 经纬度与大地坐标相互转换
  10. 分布式系统与海量数据处理
  11. 计算机二级大题知识点汇总,计算机二级office复习知识点「汇总」
  12. 关于金仓数据库的java连接问题
  13. 敏捷开发scrum详解 敏捷项目管理流程
  14. clickhouse 新增列_# 记录一次clickhouse表新增字段遇到的问题
  15. 新1期_012课_内存控制器与SDRAM
  16. win10常见问题-任务栏消失
  17. 在文件选择打开方式里,无法添加.exe程序怎么解决
  18. Virtual COM port 该设备的驱动程序未被安装:INF中服务安装段落无效错误的处理办法
  19. cydia服务器未响应,为什么cydia打开卡死 如何解决
  20. python可以p图_用Python来P图!简直耍开PS几条街!

热门文章

  1. asp.net 读取mysql数据库_asp.net访问MySQL数据库
  2. RedHat6.7安装教程,图解,超详细
  3. 云存储网关 > 常见问题 > 文件网关 > 文件网关的缓存有什么作用
  4. 用vb打开word excel 文件,出现提示“发现不可读取的内容”
  5. uniapp中qrcode生成二维码后传的参数不见了_二维码扫描登录,你必须知道的 3 件事...
  6. 运行时动态的开关 Spring Security
  7. 物联网技术引发第三次信息产业浪潮
  8. STM32 寄存器库和固件库
  9. Android学习笔记之ListView与Item的焦点冲突处理
  10. Ubuntu 9.04 死机处理(Linux死机处理)