性能工具之JMeter Dubbo 脚本开发

简介: 【5月更文挑战第13天】性能工具之JMeter Dubbo 脚本开发

前言

Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

IDEA 环境项目部署

工程整个目录结果

image.png

主要包括:

  • API 接口与实体类
  • Provider数据提供者
  • Consumer消费者

API 关键接口代码

UserInfoService:

package com.dunshan.api.service;

import com.dunshan.api.pojo.UserInfo;

import java.util.HashMap;
import java.util.List;

/**
 * @author 7DGroup
 * @version 1.0
 * @Date: 2021-05-04 11:51
 * @Description: rpc接口调用
 */
public interface UserInfoService {
   
   

    List<UserInfo> queryList();

    HashMap<String, Object> queryMap(String name);
}

Provider 关键代码

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 7DGroup
 * @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

Consumer 关键代码

ConsumerController:

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 7DGroup
 * @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

验证结果

image.png

Nacos 环境部署

下载 nacos

下载链接:https://nacos.io/zh-cn/docs/quick-start.html

启动:

sh startup.sh -m standalone

image.png

页面显示如下:
image.png

项目启动后,nacos显示如下:
image.png

dubbo 插件部署

1、下载: https://gitee.com/liselotte/spring-boot-dubbo-demo.git

2、IDEA 中编译 Jar 包
image.png

3、打成 Jar 包放入 ${JMETER_HOME}\lib\ext 路径下,重启即可

image.png

image.png

4、重启 JMeter 查看插件

image.png

添加成功如:
image.png

测试 dubbo 接口

有上面的环境,并且 JMeter 中也有 Dubbo 插件,那么剩下的就是通过插件完成今天的接口开发,接下来看下需要测试的接口有哪些,这些只模拟无参接口与有参数接口。

下面是这次做测试 Dubbo 接口

package com.dunshan.api.service;

import com.dunshan.api.pojo.UserInfo;
import java.util.HashMap;
import java.util.List;

/**
 * @author 7DGroup
 * @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 中输入接口名字,与方法名称点击获取即可把需要测试的全部方法名称用列表显示出来。

image.png

添加结果查看树进行结果验证:
image.png

带参参数请求

添加 Dubbo Sample 请求

image.png

验证结果:
image.png

总结

有上面认识后自己搭建环境学习也好,办理事情也好,都会慢慢按步骤一步一步去实现。

源码地址:

目录
相关文章
|
27天前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
51 2
|
22天前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
2月前
|
存储 Linux 数据库
性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
【8月更文挑战第7天】性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
57 1
性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
|
2月前
|
开发框架 Dubbo 应用服务中间件
微服务开发框架-----Apache Dubbo
这篇文章介绍了Apache Dubbo微服务开发框架,它提供RPC通信和微服务治理能力,支持服务发现、负载均衡和流量治理等功能,并强调了Dubbo在微服务规模化实践和企业级治理方面的优势。
微服务开发框架-----Apache Dubbo
|
2月前
|
监控 Java 测试技术
实战派必看!Python性能测试中,JMeter与Locust如何助力性能调优
【8月更文挑战第6天】性能优化是软件开发的关键。本文介绍JMeter与Locust两款流行性能测试工具,演示如何用于Python应用的性能调优。JMeter可模拟大量用户并发访问,支持多种协议;Locust用Python编写,易于定制用户行为并模拟高并发。根据场景选择合适工具,确保应用在高负载下的稳定运行。
94 4
|
2月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【8月更文挑战第6天】在数字化时代,确保软件在高并发下的稳定性至关重要。Python 提供了强大的性能测试工具,如 JMeter 和 Locust。JMeter 可配置复杂请求场景,而 Locust 则以 Python 脚本灵活模拟真实用户行为。两者结合,可全面评估系统性能。例如,对电商网站进行测试时,JMeter 模拟登录请求,Locust 定义浏览和购物行为,共同揭示系统瓶颈并指导优化,从而保证稳定高效的用户体验。
77 1
|
2月前
|
Java
性能分析之JMeter 脚本执行失败导致的问题
【8月更文挑战第20天】性能分析之JMeter 脚本执行失败导致的问题
34 0
|
5月前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
2月前
|
Dubbo Java 应用服务中间件
💥Spring Cloud Dubbo火爆来袭!微服务通信的终极利器,你知道它有多强大吗?🔥
【8月更文挑战第29天】随着信息技术的发展,微服务架构成为企业应用开发的主流模式,而高效的微服务通信至关重要。Spring Cloud Dubbo通过整合Dubbo与Spring Cloud的优势,提供高性能RPC通信及丰富的生态支持,包括服务注册与发现、负载均衡和容错机制等,简化了服务调用管理并支持多种通信协议,提升了系统的可伸缩性和稳定性,成为微服务通信领域的优选方案。开发者仅需关注业务逻辑,而无需过多关心底层通信细节,使得Spring Cloud Dubbo在未来微服务开发中将更加受到青睐。
69 0
|
12天前
|
Dubbo 应用服务中间件 Apache
Star 4w+,Apache Dubbo 3.3 全新发布,Triple X 领衔,开启微服务通信新时代
在 Apache Dubbo 突破 4w Star 之际,Apache Dubbo 团队正式宣布,Dubbo 3.3 正式发布!作为全球领先的开源微服务框架,Dubbo 一直致力于为开发者提供高性能、可扩展且灵活的分布式服务解决方案。此次发布的 Dubbo 3.3,通过 Triple X 的全新升级,突破了以往局限,实现了对南北向与东西向流量的全面支持,并提升了对云原生架构的友好性。
下一篇
无影云桌面