【用Jmeter进行Dubbo接口测试】

本文详细介绍了Dubbo服务的调用流程,包括服务提供者、消费者、注册中心和监控中心的角色。并展示了如何使用JMeter进行Dubbo接口测试,包括设置各种参数如协议、超时时间、负载均衡策略等。此外,还讲解了如何在JMeter中添加JWT认证信息,以及在服务提供者和消费者端实现JWT认证的拦截器。
摘要由CSDN通过智能技术生成

一、Dubbo介绍

**节点角色**

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

调用流程

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

二、dubbo接口怎么测

**1.使用工具-jmeter**

1)依赖jar包:放置位置 apache-jmeter-5.0\lib\ext
下载地址:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo/releases/tag/2.7.8
2)解决响应数据中中文显示乱码问题
打开安装路径\bin\jmeter.properties文件,找到配置:
 #The encoding to be used if none is provided (default ISO-8859-1) 
#sampleresult.default.encoding=ISO-8859-1
把注释删掉,编码改成utf-8格式
The encoding to be used if none is provided (default utf-8) sampleresult.default.encoding=utf-8
3)重启Jmeter打开
  1. dubbo参数设置

先启动jmeter添加dubbo sample
在这里插入图片描述

**参数设置:**
1)填写zookeeper地址,填完zk地址之后,点击Get Provider List 按钮,会自动检索出全部的Interfaces;选择被测接口,会自动填充下面的Interface Settings
2)Consumer Settings:填写版本号和分组
3)Interface:即要测试的服务路径+接口名
4)Method:方法名
5)param:填写参数类型和对应的参数
各参数说明如下:

Protocol:注册协议,包括zookeeper、multicast、Redis、simple;

Address:注册地址,dubbo服务的IP+Port:

①、当使用zk,address填入zk地址,集群地址使用","分隔;

②、使用dubbo直连,address填写直连地址和服务端口;

Protocol:使用的dubbo协议,包括dubbo、rmi、hessian、webservice、memcached、redis,根据自己的协议类型选择对应的选项即可;

Timeout:请求超时时间,单位ms,根据dubbo具体配置填写;

Version:版本,dubbo不同版本之间差异较大,不同版本之间不能互相调用,这里指定dubbo版本,是为了方便识别和说明;

Retries:异常重试次数(类似这种分布式服务通信框架,大多都有重试机制,是为了保证事务成功率);

Cluster:集群类型,包括failover、failfast、failsafe、failback、failking;

Group:组类型,如果有的话,根据配置填写即可;

Connections:连接数,同上,根据配置填写;

Async:服务处理类型,包括sync(同步)、async(异步),根据配置填写;

Loadbalance:负载均衡策略,包括random(随机)、roundrobin(轮询)、leastactive(最少活跃数)、consistenthash(一致性哈希);

Interface:接口名(因为dubbo服务大多是开发根据规范自行命名的,因此这里需要填写完整的接口名+包名);

Method:当前接口下的方法名,按照开发提供的API文档填写即可;

Args:接口报文,根据API文档填写,如上图所示,添加输入行,输入对应的参数类型和值即可(参数类型和值如何定义填写,请参考上面的链接);

①、paramType:参数支持任何类型,包装类直接使用java.lang下的包装类,小类型使用:int、float、shot、double、long、byte、boolean、char,自定义类使用类完全名称;

②、paramValue:基础包装类和基础小类型直接使用值,例如:int为1,boolean为true等,自定义类与List或者Map等使用json格式数据;
为了在JMeter Dubbo调用时添加JWT认证信息,可以按照以下步骤进行操作:

1. 在JMeter中打开Dubbo Sampler,选择需要进行JWT认证的请求。

2. 在请求的参数列表中添加一个名为“token”的参数,将JWT token作为参数值。

3. 在Dubbo Sampler的“Advanced”选项卡中,找到“Dubbo Attachments”一栏,添加一个键为“jwt”的附件,将JWT token作为值。

4. 在Dubbo服务提供者端,添加一个拦截器,在Dubbo服务方法执行之前进行JWT认证,如果认证通过,则在Dubbo上下文中添加JWT认证信息。示例代码如下:

public class JwtAuthenticationFilter implements Filter {

@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
    String token = RpcContext.getContext().getAttachment("jwt");
    if (token != null && JwtUtils.verifyToken(token)) {
        // 认证通过,将认证信息添加到Dubbo上下文中
        RpcContext.getContext().setAttachment("jwt", token);
        return invoker.invoke(invocation);
    } else {
        // 认证失败,返回错误信息
        return new RpcResult(new AuthenticationException("JWT authentication failed"));
    }
}

}


5. 在Dubbo服务消费者端,添加一个拦截器,在Dubbo调用之前将JWT token添加到Dubbo上下文中。示例代码如下:

public class JwtAttachmentFilter implements Filter {

@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
    String token = Thread.currentThread().getName();
    if (token != null && !token.isEmpty()) {
        RpcContext.getContext().setAttachment("jwt", token);
    }
    return invoker.invoke(invocation);
}

}


6. 运行JMeter测试计划,Dubbo调用时将自动添加JWT认证信息。
Doe 发布 [V1.0.0] 前段时间排查某问题的时候,想要快速知道某些dubbo接口(三无)的响应结果,但不想启动项目(因为这些项目不是你负责的,不会部署而且超级笨重),也不想新建一个dubbo客户端项目(占地方),也不想开telnet客户端连接口(麻烦而且有限制)。所以扣了dubbo的netty模块源码,封装了个收发客户端集成一个工具,可以快速调试dubbo接口。源码地址:https://github.com/VIPJoey/doe 极简模式 普通模式 目录结构 mmc-dubbo-api 接口项目,主要用于测试。 mmc-dubbo-provider dubbo提供者项目,主要用于测试。 mmc-dubbo-doe 主项目,实现dubbo接口调试。 deploy 部署文档 功能特性 极简模式:通过dubbo提供的telnet协议收发数据。 普通模式:通过封装netty客户端收发数据。 用例模式:通过缓存数据,方便下一次操作,依赖普通模式。 增加依赖:通过调用maven命令,下载jar包和热加载到系统,主要用来分析接口方法参数,主要作用在普通模式。 依赖列表:通过分析pom文件,展示已经加载的jar包。 其它特性 springboot 整合 redis,支持spring el 表达式。 springboot 整合 thymeleaf。 springboot 整合 logback。 netty rpc 实现原理。 开发环境 jdk 1.8 maven 3.5.3 dubbo 2.6.1 lombok 1.16.20 idea 2018 windows 7 安装步骤 安装jdk 安装maven,并设置好环境变量,仓库目录。 进入mmc-dubbo-api目录,执行mvn clean install命令,省api的jar包。 进入mmc-dubbo-doe目录,执行mvn clean install 命令,在target目录生成dubbo-doe-1.0.0-RELEASE.jar 在F盘(可以任意盘)创建目录F:\app\doe 把dubbo-doe-1.0.0-RELEASE.jar拷贝到F:\app\doe 把deploy目录中的所有文件拷贝到F:\app\doe 如果您电脑安装了git bash,可以在bash窗口运行 ./deploy.sh start,否则如果没有安装git bash,只能打开cmd切换到F:\app\doe目录,然后执行java -jar dubbo-doe-1.0.0-RELEASE.jar --spring.profiles.active=prd 打开浏览器,访问地址:http://localhost:9876/doe/home/index 全剧终
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仙女肖消乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值