【用Jmeter进行Dubbo接口测试】

一、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认证信息。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

仙女肖消乐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值