-
性能工具之Jmeter-Dubbo脚本开发
Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
一、idea 环境项目部署
1、工程整个目录结果
-
api接口与实体类
-
provider数据提供者
-
consumer消费者
2、api关键接口代码
「SserInfoService:」
package com.dunshan.api.service; import com.dunshan.api.pojo.UserInfo; import java.util.HashMap; import java.util.List; /** * @author LiWen * @version 1.0 * @Date: 2021-05-04 11:51 * @Description: rpc接口调用 */ public interface UserInfoService { List<UserInfo> queryList(); HashMap<String, Object> queryMap(String name); }
3、provider关键代码
接口实现「UserInfoServiceImpl:」
package com.dunshan.provider.Impl; import com.dunshan.api.pojo.UserInfo; import com.dunshan.api.service.UserInfoService; import org.apache.dubbo.config.annotation.Service; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; /** * @author LiWen * @version 1.0 * @Date: 2021-05-04 12:03 * @Description: 提供者实现类 */ @Service public class UserInfoServiceImpl implements UserInfoService { @Override public List<UserInfo> queryList() { // 初始化数据 UserInfo testDTO1 = new UserInfo(); testDTO1.setId(1); testDTO1.setName("学生"); testDTO1.setNumber(100); testDTO1.setCreateTime(new Date()); UserInfo testDTO2 = new UserInfo(); testDTO2.setId(2); testDTO2.setName("7D-RESAR-性能测试"); testDTO2.setNumber(101); testDTO2.setCreateTime(new Date()); // 组装数据 List<UserInfo> list = new ArrayList<>(); list.add(testDTO1); list.add(testDTO2); return list; } @Override public HashMap<String, Object> queryMap(String name) { HashMap<String, Object> map = new HashMap<>(2); map.put(name, "7D-RESAR-初级工具班"); map.put("nacos", "注册中心,配置管理中心"); map.put("date", System.currentTimeMillis()); return map; } }
配置文件「application.yml:」
server: port: 8861 dubbo: # 配置服务信息 application: name: dubbo-provider # 禁用QOS同一台机器可能会有端口冲突现象 qos-enable: false qos-accept-foreign-ip: false # 配置注册中心 registry: address: nacos://127.0.0.1:8848 # 设置协议-协议由提供方指定消费方被动接受 protocol: name: dubbo port: 20880 spring: main: # 解决Bean重复定义问题 allow-bean-definition-overriding: true
4、consumer关键代码
「Span 数据结构:」
package com.dunshan.consumer.controller; import com.dunshan.api.pojo.ResultVO; import com.dunshan.api.pojo.UserInfo; import com.dunshan.api.service.UserInfoService; import org.apache.dubbo.config.annotation.Reference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.List; /** * @author LiWen * @version 1.0 * @Date: 2021-05-04 11:54 * @Description: 消费测试接口 */ @RestController @RequestMapping("/api") public class ConsumerController { /** * Dubbo远程调用注解 */ @Reference private UserInfoService userInfoService; @RequestMapping(value = "/list", method = RequestMethod.GET) public ResultVO getList() { List<UserInfo> providerTestDTOList = userInfoService.queryList(); return new ResultVO.Builder<>().code(200).message("success").data(providerTestDTOList).build(); } /** * 查询查询 * @param name * @return */ @GetMapping("/api/query") public ResultVO query(String name) { HashMap<String, Object> map = userInfoService.queryMap(name); return new ResultVO.Builder<>().code(200).message("success").data(map).build(); } }
「application.yml:」
server: port: 8862 dubbo: # 配置服务信息 application: name: dubbo-consumer # 禁用QOS同一台机器可能会有端口冲突现象 qos-enable: false qos-accept-foreign-ip: false # 配置注册中心 registry: address: nacos://127.0.0.1:8848 # 设置超时时间 consumer: timeout: 4000 spring: main: # 解决Bean重复定义问题 allow-bean-definition-overriding: true
5、验证结果
二、nacos 环境部署
1、下载nacos
下载链接:https://nacos.io/zh-cn/docs/quick-start.html
启动:
liwen@ bin % sh startup.sh -m standalone
页面显示如下
其他配置(略):
项目启动后 nacos显示如下
三、dubbo插件部署
1、下载: https://gitee.com/liselotte/spring-boot-dubbo-demo.git
2、idea中编译jar
3、打成jar包放入${JMETER_HOME}\lib\ext路径下,重启即可。
4、重启 Jmeter查看插件
添加成功如:
四、测试dubbo接口
有上面的环境,并且Jmeter中也有dubbo插件,那么剩下的就是通过插件完成今天的接口开发,接下来看下需要测试的接口有哪些,这些只模拟无参接口与有参数接口。
下面是这次做测试dubbo接口
package com.dunshan.api.service; import com.dunshan.api.pojo.UserInfo; import java.util.HashMap; import java.util.List; /** * @author LiWen * @version 1.0 * @Date: 2021-05-04 11:51 * @Description: rpc接口调用 */ public interface UserInfoService { List<UserInfo> queryList(); HashMap<String, Object> queryMap(String name); }
五、不带参数请求
添加 Dubbo Sample 请求,并且根据上面需要测试的接口,在 Get Provider LIst 中的 Interface 中输入接口名字,与方法名称点击获取即可把需要测试的全部方法名称用列表显示出来。
添加结果查看树进行结果验证:
六、带参参数请求
添加 Dubbo Sample 请求:
验证结果:
七、总结
要深刻相信一个原理就是 “做什么事情都不容易,任何事情都不能一触而就” ,对于君子每一件事情都是好事情!
有上面认识后自己搭建环境学习也好,办理事情也好,都会慢慢按步骤一步一步去实现。
项目地址:https://gitee.com/perfmance/dunshan-pef.git
来源:https://www.cnblogs.com/GaoLou/p/14843149.html