『动善时』JMeter基础 — 52、使用JMeter测试Dubbo接口
1、Dubbo介绍
(1)Dubbo说明
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
简单的说:Dubbo一个高性能的,基于 Java 的,开源 RPC 框架。所以严格来说,Dubbo不是协议,而是一种分布式服务框架。
(2)Dubbo运行原理
Dubbo架构图如下所示:

节点角色说明:
Provider:暴露服务的服务提供方。Consumer:调用远程服务的服务消费方。Registry:服务注册与发现的注册中心。Monitor:统计服务的调用次数和调用时间的监控中心。Container:服务运行的容器。
调用关系说明:
- 运行服务的容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
对上图进行说明:
- 虚线都是异步访问,实线都是同步访问。
- 紫色虚线:在启动时完成的功能。
- 青色虚线(实线):都是程序运行过程中执行的功能。
- 所有的角色都是可以在单独的服务器上。
Dubbo简单的运行原理图:
2、准备测试Dubbo接口的环境
需要下载JMeter的Dubbo依赖JAR包,根据你Dubbo服务的版本,去选择对应的插件版本。
例如:我的Dubbo是2.3.7版本,我需要的是jmeter-plugins-dubbo-2.7.1-jar-with-dependencies.jar。下载后放到JMeter安装目录中的lib/ext路径下。
各版本下载地址:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo/releases
注意:如果放依赖包之前就已经启动了JMeter的话,需要重启JMeter。
之后我就可以使用JMeter中的取样器元件,来发送支持Dubbo协议的请求。
如下图所示:

说明:
我们在下载Dubbo的JAR包时候,会看到有两个JAR包:
Jmeter-plugins-dubbo-2.7.1-jar-with-dependencies.jarJmeter-plugins-dubbo-2.7.1.jar如果使用的是:
jmeter-plugins-dubbo-${version}-jar-with-dependencies.jar此包中已含必要的依赖,推荐使用这个包。
如果使用的是:
jmeter-plugins-dubbo-${version}.jar需要自行添加插件的依赖包,所依赖JAR包的列表如下:
dubbo-2.5.3.jarjavassist-3.15.0-GA.jarzookeeper-3.4.6.jarzkclient-0.1.jarjline-0.9.94.jarnetty-3.7.0-Final.jarslf4j-api-1.7.5.jarlog4j-over-slf4j-1.7.5.jar
3、Dubbo Sample界面详解
Dubbo Sample组件添加方式:选中“线程组”右键 —> 添加 —> 取样器 —> Dubbo Sample。
界面如下图所示:

针对界面中各选项说明:
- 名称:
Dubbo Sample组件的自定义名称,见名知意最好。 - 注释:即添加一些备注信息,对该
Dubbo Sample组件的简短说明,以便后期回顾时查看。
(1)Registry Settings:注册设置
Protocol:注册协议,包括zookeeper、multicast、Redis、simple、none;Address:输入Dubbo注册地址,注册中心的IP+Port:
1、当使用zookeeper,Address填入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协议,包括dubbo、rmi、hessian、webservice、memcached、redis,根据自己的协议类型,选择对应的选项即可。
(3)Consumer&Service Settings:消费者和提供者设置
Timeout:请求接口超时时间,单位ms,根据Dubbo具体配置填写;Version:版本,Dubbo不同版本之间差异较大,不同版本之间不能互相调用,这里指定Dubbo版本,是为了方便识别和说明;(一般无需填写)Retries:异常重试次数。类似这种分布式服务通信框架,大多都有重试机制,是为了保证事务成功率;Cluster:集群类型,包括failover、failfast、failsafe、failback、failking;Group:组类型,如果有的话,根据配置填写即可;Connections:连接数,同上,根据配置填写;Async:服务处理类型,包括sync(同步)、async(异步),根据配置填写;(现在都默认选择sync同步,目前所示样例都是同步接口)Loadbalance:负载均衡策略,包括random(随机)、roundrobin(轮询)、leastactive(最少活跃数)、consistenthash(一致性哈希);
(4)Interface Settings:接口设置
Interface:填写要请求的接口名。因为Dubbo服务大多是开发根据规范自行命名的,因此这里需要填写完整的接口名+包名;(如果选择了上面的Get Provider List,则无需填写,会自动回填)Method:当前接口下的方法名,按照开发提供的API文档填写即可;(如果选择了上面的Get Provider List,则无需填写,会自动回填)Args:接口参数,根据API文档填写,输入对应的参数类型和参数值即可;
1)paramType:参数支持任何类型,可以直接使用java.lang下的包装类,如:int、float、shot、double、long、byte、boolean、char、String等。
类型也可以是自定义对象POJO,需使用类的完全名称。
2)paramValue:填写需要的参数值,例如:int为1,boolean为true等,自定义类与List或者Map等使用Json格式数据。
4、Dubbo Sample组件的使用
(1)测试计划内包含的元件
添加元件操作步骤:
- 创建测试计划。
- 创建线程组:
选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组。 - 在线程组中,添加取样器
Dubbo Sample组件:选中“线程组”右键 —> 添加 —> 取样器 —> Dubbo Sample。 - 在线程组中,添加监听器“察看结果树”组件:
选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树。
最终测试计划中的元件如下:

提示:下面介绍两种方式,来请求Dubbo 服务。
(2)使用zookeeper协议请求Dubbo接口
1)使用zookeeper协议调用Dubbo服务步骤:
- 先获取zookeeper注册中心的地址,因为Dubbo服务都注册在这里。
- 点击
Get Provider List按钮,可以获得提供者的所提供服务的列表。 - 选择要请求的接口与方法。
- 填入对应的参数,发送请求。
2)Dubbo接口信息说明:
- 接口:
com.example.provider.service.HelloFroParameterService:1.0.0 - 方法名:
sayHelloFroParameter - 参数类型:
String,如果是自定义对象,填写对象的全名。 - 参数值:字符串就行。
填写好的Dubbo Sample请求内容,如下图所示:

提示:其他选项我们暂时不用填写。
3)补充说明:
当点击Get Provider List按钮之后,会出现如下提示信息:

意思是:获取所有提供者的服务列表,可能会导致 JMeter 停止响应几秒钟。 你要继续吗?
我们点击是即可。
然后停顿一会,会出现如下提示:

意思是:提示你,获取提供者列表以完成! 检查日志是否有错误。
这就证明我们获得提供者列表成功了。
提示:
如果10秒中都没有出现如上弹框,证明列表获取失败,可能是zookeeper地址填写错误,也可以能是服务有问题了。
而此时JMeter界面是卡死状态,我们就需要强制关闭掉JMeter了,因为等再长时间也没有意义了。
获取到提供者列表后,在Interfaces和Methods的下拉列表中就有内容了,我们可以选择需要调用的接口和方法。
同时选择好的接口和方法,会同步到下面Interface Settings中的接口和方法的设置中。
如下图所示:

4)运行查看结果
运行脚本,查看结果。
我们可以看到,成功请求了Dubbo接口,并接收到了返回的数据。
如下图所示:

(3)使用直连的方式请求Dubbo接口
直连方式与zookeeper连接方式不同,不需要到注册中心去分配一个提供者来提供服务,我们是直接链接某个提供者,去进行请求。
1)使用直连方式调用Dubbo服务步骤:
- Protocol协议选择
none。 - Dubbo接口填写直连地址:如:
127.0.0.1:20880。 - 填写接口地址:
com.example.provider.service.HelloService:1.0.0 - 填写调用的方法名:
sayHello。 - 请求一个不带参数的Dubbo接口,所以不需要填写参数。
编辑完成,如下图所示:

2)运行查看结果
我们可以看到,成功请求了Dubbo接口,并接收到了返回的数据。
如下图所示:

以上就完成了JMeter对Dubbo接口的访问。
『动善时』JMeter基础 — 52、使用JMeter测试Dubbo接口的更多相关文章
- 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求
目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...
- 『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL)
目录 1.为什么要使用JMeter连接数据库 2.JMeter连接数据库的前提 3.JDBC连接配置组件界面介绍 4.JMeter连接数据库演示 (1)测试计划内包含的元件 (2)测试计划中添加链接数 ...
- 『动善时』JMeter基础 — 58、JMeter分布式测试
目录 1.JMeter分布式测试概念 2.JMeter分布式测试前提条件 3.JMeter实现分布式测试 (1)在执行机中的配置 (2)在控制机中的配置 (3)启动执行机中的JMeter服务 (4)在 ...
- 『动善时』JMeter基础 — 2、JMeter的安装和启动
1.安装Java环境 由于JMeter是纯Java的桌面应用程序,因此它的运行环境需要Java环境,即需要安装JDK或JRE.(也就是安装JDK环境) 步骤简要说明: 下载并安装JDK 配置环境变量 ...
- 『动善时』JMeter基础 — 7、jmeter.properties文件常用配置
目录 1.默认语言设置 2.配置默认编码格式 3.GUI图标放大比例设置 4.功能区工具栏图标大小设置 5.视图区目录树图标大小设置 6.内容区编辑字体设置 7.添加JMeter元素快捷键设置 8.捕 ...
- 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化
目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...
- 『动善时』JMeter基础 — 32、JMeter察看结果树组件详解
目录 1.察看结果树介绍 2.察看结果树界面详解 3.察看结果树的其他功能 (1)将数据写入文件中 (2)Search功能 (3)Scroll automatically选项 4.总结 1.察看结果树 ...
- 『动善时』JMeter基础 — 38、JMeter中实现跨线程组关联
目录 1.JMeter中实现跨线程组关联说明 (1)JMeter中实现跨线程组关联步骤 (2)测试计划内包含的元件 2.用户登陆请求的相关操作 (1)进行登陆操作获取Cookie信息 (2)把Cook ...
- 『动善时』JMeter基础 — 47、JMeter的HTTP代理服务器详细介绍
目录 1.HTTP代理服务器的添加 2.HTTP代理服务器界面详解 (1)State:状态 (2)Global Settings:全局设置 (3)Test Plan Creation:测试计划创建 ( ...
随机推荐
- DataGear 变更部署数据库为SQL Server填坑指南(含转写后的SQL server代码及SQL server配置文件)
1. 引言 2. 配置数据库链接 3. 引入数据库驱动 4. 手动初始化数据库 5. 改写SQL 6. 其他 7. 参考 1. 引言 DataGear默认使用Derby数据库作为系统的元数据库,至于待 ...
- java中基本数据类型、包装类及字符串之间的相互转换
基本数据类型:不支持面向对象的编程机制(没有属性和方法),即不支持面向对象,之所以提供8中基本数据类型,是为了方便常规数据的处理. 包装类:通过包装类可以将基本数据类型的值包装为引用数据类型的对象,使 ...
- 密码学系列之:memory-hard函数
密码学系列之:memory-hard函数 目录 简介 为什么需要MHF Memory hard的评估方法 MHF的种类 MHF的密码学意义 memory-hard在MHF中的应用 简介 Memory ...
- [刷题] 51 N-Queens
要求 将n个皇后摆放在n*n的棋盘中,使横.竖和两个对角线方向均不会同时出现两个皇后 思路 尝试在一行中摆放,如果摆不下,回到上一行重新摆放,直到所有行都摆下 快速判断不合法情况 竖向:col[i]表 ...
- [Java] 数据库编程JDBC
背景 持久化:把Java对象保存在硬盘中 序列化:将对象转换为二进制对象,再保存 保存在关系型数据库中 Object-Relational Mapping(对象-关系映射框架,或ORM框架):把对象属 ...
- C++知识点案例 笔记-5
1.关系运算符重载 2.类型转换函数重载 3.转换构造函数 4.函数模板 5.显式实例化 6.类模板外定义模板函数 1.关系运算符重载 ==关系运算符重载== //直接(按分数)比较两个对象 #inc ...
- 064.Python开发虚拟环境
在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题:亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难.此时,我们需要对于不同的工程使用不同 ...
- Redis 为什么使用跳跃表
引言 跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的. 什么是跳跃表 对于一个单链表来讲,即便链表中存储的数据是有序的,如果我们要想在其中查找某个 ...
- mysql数据库-简介
目录 1 MySQL 的三大主要分支 1.1 官方文档 1.2 版本演变 1.3 MySQL 安装方式 1.3.1 RPM包安装Mysql 1.3.2 二进制安装MySQL 1.4 mysql组成 1 ...
- Camera Lens Coating
Camera Lens Coating Coating Progress 转换镜头,根据要求进行OEM和设计. 光学元件:望远镜.显微镜.相机和数码相机镜头.放大镜头和远摄镜头.定心镜头.投影镜头.投 ...
