zoukankan      html  css  js  c++  java
  • 『动善时』JMeter基础 — 52、使用JMeter测试Dubbo接口

    1、Dubbo介绍

    (1)Dubbo说明

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

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

    (2)Dubbo运行原理

    Dubbo架构图如下所示:

    image

    节点角色说明:

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

    调用关系说明:

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

    对上图进行说明:

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

    Dubbo简单的运行原理图:

    image

    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协议的请求。

    如下图所示:

    image

    说明:

    我们在下载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

    界面如下图所示:

    image

    针对界面中各选项说明:

    • 名称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(一致性哈希);

    (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. 在线程组中,添加监听器“察看结果树”组件:选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树

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

    image

    提示:下面介绍两种方式,来请求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请求内容,如下图所示:

    image

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

    3)补充说明

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

    image

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

    我们点击是即可。

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

    image

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

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

    提示:

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

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

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

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

    如下图所示:

    image

    4)运行查看结果

    运行脚本,查看结果。

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

    如下图所示:

    image

    (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接口,所以不需要填写参数。

    编辑完成,如下图所示:

    image

    2)运行查看结果

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

    如下图所示:

    image

    以上就完成了JMeter对Dubbo接口的访问。

  • 相关阅读:
    PHP实现无限极分类
    html2canvas生成并下载图片
    一次线上问题引发的过程回顾和思考,以更换两台服务器结束
    Intellij IDEA启动项目报Command line is too long. Shorten command line for XXXApplication or also for
    mq 消费消息 与发送消息传参问题
    idea 创建不了 java 文件
    Java switch 中如何使用枚举?
    Collections排序
    在idea 设置 git 的用户名
    mongodb添加字段和创建自增主键
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/14972958.html
Copyright © 2011-2022 走看看