jmeter测试rpc接口-使用dubbo框架调用【杭州多测师_王sir】

news2024/10/7 2:23:26

1.基于SOAP架构。基于XML规范。基于WebService协议。特点:接口地址?wsdl结尾
2.基于RPC架构,基于dubbo协议,thrift协议。SpringCloud微服务。
3.基于RestFul架构,基于json规范。基于http协议(我们常用的都是这种,cms平台也是)
RestFul规则∶
接口地址: http://127.0.0.1/user , get(查询用户) , post(新增用户),put(修改用户).delete (删除用户)
     Json数据格式:只有两种数据类型:键值对:{key : value}
     数组:[arry1,arry2]

测试dubbo接口:大数据之高性能的分布式服务框架Dubbo

接口测试主要分HTTP和RPC两类,RPC类型里面以Dubbo较为知名。
互联网微服务架构,两种接口都需要做接口测试的,不管是业务测试还是回归测试;
Dubbo:Java栈的互联网公司比如阿里、美团、58、滴滴、京东等等都是差不多的服务端架构,所以这些公司,两类接口测试也是必不可少的工作部分;
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)

rpc API 文档如下
接口实体: Object restForRpc(RequestParams requestParams);
请求URL: http://10.118.60.177:8931/express/test/restForRpc
请求方式:POST

dubbo是什么
dubbo是阿里巴巴开源的一套rpc方案,以为理念很契合微服务,这几年很火,用户里面不凡京东,当当,去哪儿等大公司。

RPC场景

dubbo架构

官网也提供了一个很简单实用的demo来演示dubbo协议的使用,用起来的确很简单强大。dubbo demo
可参考 http://dubbo.io/ 首页的例子已经很好了。
基于telnet的简单调试接口
任何一个dubbo服务都支持一个简单的telent交互。比如
telnet localhost 20880
>ls -l
> ls -l DemoService
> invoke DemoSerivce.sayHello("seveniruby")
这种方式只能用来简单验证接口的可用

什么是RPC?PRC全称是Remote Procedure Call,即远程过程调用。比如我发送了一个 rpc 请求:POST /getUser?user_id=123;相当于是我本地的电脑调用了远在服务器的 getUser(user_id) 方法,这就叫远程过程调用,这个远不一定是跨网络的调用,同一台电脑的2个进程之间调用也可以称为是RPC

 还有一点,RPC也是一种API设计风格,因为rpc只有GET 和 POST 请求,它不像restful风格那样有多种请求: DELETE、PUT、GET、POST

RPC 和 Dubbo
rpc和dubbo比起来,rpc更像是一种编程细想或者是通信方式(RPC不是协议),而dubbo是rpc的一种实现方式,就像接口和实现类一样,rpc是接口,dubbo是实现类;我们常说Dubbo是阿里巴巴开源的RPC框架,就是这个道理。另外在说一下,dubbo是阿里巴巴在2011年开源,2018年2月后阿里巴巴将Dubbo开源项目捐给了 Apache基金会,从此以后,Dubbo正式进入Apache开源孵化器;Dubbo就不在属于阿里巴巴,而是属于社区的

还有一点需要说明的是,dubbo即是框架也是协议;只不过dubbo协议只能在dubbo框架上使用,这个协议是阿里巴巴自己实现的一种应用层协议,传输层还是TCP。所以Dubbo协议与HTTP、FTP,SMTP这些应用层协议是并列的概念。除了默认的Dubbo协议,Dubbo框架还支持RMI、Hessian、HTTP等协议。

dubbo协议和http协议
首先,dubbo 和http协议都是基于tcp开发出来的,而dubbo是高性能和透明化的RPC远程服务调用方案,为什么叫高性能,就是因为它传输的信息更少,少就意味着更快,你提着一块10斤重的石头 和 提着一个一斤的石头跑,你说哪个快? 但是dubbo的协议是基于java的序列化开发而来的,虽然快,但是应用面比较窄,只能在dubbo框架上使用;但是http就不一样了,http的应用非常广泛,我用http协议可以和各种不同语言开发的服务器进行通讯,比如java调用python的服务肯定没问题, 但是dubbo就不行了,因为dubbo不支持python;虽然http也是基于tcp开发的,但是和dubbo比起来就显得重了很多;因为dubbo除了传输数据之外就没别的东西了,而http除了数据之外还有一堆的请求头(request)和响应头(response),这无疑会加重传输的负担;除此之外,如果是html的http请求,在发送请求和响应时会先将数据转成json在序列化,相比dubbo之下增加了一重转换,如下图

所以,相同的数据量进行传输时,dubbo 比 http 快了将近一倍,只是在当今的计算机环境下, 这多一点开销对公司来说不算什么,如果是需要特别快速的需求,像秒杀类的商品抢购,用dubbo是最合适的,其他场景用http 也够用了安全性
从安全性来说,dubbo肯定没有http安全,但是也不需要,因为dubbo从设计之初就是为了在内网使用,所以不需要考虑安全性dubbo 和 spring cloud区别
1、dubbo由于是二进制的传输,占用带宽会更少
2、springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大
3、dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决
4、springcloud的接口协议约定比较自由且松散,需要有强有力的行政措施来限制接口无序升级
5、dubbo的注册中心可以选择zk,redis等,springcloud的注册中心用eureka或者Consul
6、spring cloud 是基于spring 开发,spring本身具有非常完整的生态,与其他框架整合非常方便;易用性高;
7、dubbo没有全家桶,dubbo社区也不如spring cloud;
如果让我选,我一定用 spring cloud ,如果是你,你会怎么选呢?

本文转载于:https://www.cnblogs.com/qtclm/p/16747764.html1.下载用于测试dubbo的spring boot项目
参考文章:http://t.zoukankan.com/111testing-p-11297038.htmlhttps://zhuanlan.zhihu.com/p/539190478
dubbo介绍:https://www.cnblogs.com/liuyuelinfighting/p/14972958.htmlhttps://dubbo.apache.org/zh/docs3-v2/java-sdk/quick-start/spring-boot/https://www.cnblogs.com/111testing/p/11297038.html
jmeter测试dubbo接口插件下载:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo/releases

git clone -b master https://github.com/apache/dubbo-samples.git
cd dubbo-samples/dubbo-samples-spring-boot
mvn clean package // 打包成jar
//启动生产者服务
cd ./dubbo-samples-spring-boot-provider
java -jar ./target/dubbo-samples-spring-boot-provider-1.0-SNAPSHOT.jar
// 启动消费者服务
java -jar ./target/dubbo-samples-spring-boot-consumer-1.0-SNAPSHOT.jar

示例核心流程

1. 定义服务接口
dubbo-samples-spring-boot-interface/DemoService.java

package org.apache.dubbo.samples.basic.api;

public interface DemoService {
    String sayHello(String name);
}
2. 提供方实现接口并暴露服务
dubbo-samples-spring-boot-provider/DemoServiceImpl.java
@DubboService
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        System.out.println("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
        return "Hello " + name;
    }
}
3. 配置 application.yml 文件
dubbo-samples-spring-boot-provider/resources/application.yml
dubbo:
  application:
    name: dubbo-springboot-demo-provider
  protocol:
    name: dubbo
    port: -1
  registry:
    id: zk-registry
    address: zookeeper://127.0.0.1:2181
  config-center:
    address: zookeeper://127.0.0.1:2181
  metadata-report:
    address: zookeeper://127.0.0.1:2181
4. 定义 Spring Boot 主函数,其中,@EnableDubbo 必须配置。

dubbo-samples-spring-boot-provider/ProviderApplication.java
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
    public static void main(String[] args) throws Exception {
        new EmbeddedZooKeeper(2181, false).start();

        SpringApplication.run(ProviderApplication.class, args);
        System.out.println("dubbo service started");
        new CountDownLatch(1).await();
    }
}

5. 引用远程服务
dubbo-samples-spring-boot-consumer/ConsumerApplication.java

public class ConsumerApplication {
    @DubboReference
    private DemoService demoService;
}
6. 定义 application.yml
dubbo-samples-spring-boot-consumer/application.yml

dubbo:
  application:
    name: dubbo-springboot-demo-consumer
  protocol:
    name: dubbo
    port: -1
  registry:
    id: zk-registry
    address: zookeeper://127.0.0.1:2181
  config-center:
    address: zookeeper://127.0.0.1:2181
  metadata-report:
    address: zookeeper://127.0.0.1:2181
    
 7. 加载 Spring 配置,并调用远程服务
dubbo-samples-spring-boot-consumer/ConsumerApplication.java

@SpringBootApplication
@Service
@EnableDubbo
public class ConsumerApplication {
    @DubboReference
    private DemoService demoService;

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(ConsumerApplication.class, args);
        ConsumerApplication application = context.getBean(ConsumerApplication.class);
        String result = application.doSayHello("world");
        System.out.println("result: " + result);
    }
}

注意:
1.启动生产者(provider)项目时会自动关联启动zookeeper,端口占用:2181
2.dubbo服务默认占用端口:20880 
3.jmeter测试时可以使用jar启动项目,也可以使用spring boot启动项目(只启动provider端即可)

2.下载jmeter测试dubbo所需要的插件,我使用的版本是2.7.8,将插件放到jmeter/lib/ext目录下,然后打开jmeter搞事情了
地址: https://github.com/thubbo/jmeter-plugins-for-apache-dubbo/releases
这里的sayGoodbye方法是自己手动添加的,用于加深对这块的理解

 3.中途遇到的问题以及处理
1.dubbo请求失败,这篇文章里有提到处理:https://blog.csdn.net/inlauallnoany/article/details/119237582,如果是在错误信息里面看到172.17.160.1,则说明iis服务有冲突,需要关闭iis服务,关闭iis服务:https://www.jb51.net/os/win11/812370.html
2.下载的dubbo项目,默认的interface包路径是错误的,需要替换为具体的接口路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据分享】2000-2022年我国乡镇人口数量数据(免费获取/Shp/Excel格式)

在之前的文章中我们分享了基于LandScan数据集的2000-2022年的1km精度的全球、全国、分省、分市的人口空间分布栅格数据(可查看之前的文章获悉详情)。以及基于栅格数据处理出的Shp和Excel两种格式的我国省市县三级的2000-2022年度的人口数量数据&#xff…

【密码学】六、公钥密码

公钥密码 1、概述1.1设计要求1.2单向函数和单向陷门函数 2、RSA公钥密码体制2.1加解密2.2安全性分析 3、ElGamal公钥密码体制3.1加解密算法3.2安全性分析 4、椭圆曲线4.1椭圆曲线上的运算4.2ECC 5、SM2公钥密码体制5.1参数选取5.2密钥派生函数5.3加解密过程5.3.1初始化5.3.2加密…

photoshop生成器引入到electron项目(electron与photoshop建立通信)

Photoshop引入了nodejs,在启动的时候,通过pipe调起nodejs运行时核心generator-builtin,通过KLVR机制与ps进行通信和交互,同时会加载用户编写的扩展。 这里记录一下引入时的踩坑过程 generator-core就是它的源码,elect…

【项目部署】JavaScript解析JSON解析报错Unexpected token xxx is not valid JSON

问题背景 这个报错发生在之前部署的一个前后端分离的项目中。后端使用的Spring Boot,前端使用的JavaScript,前后端交互使用Thymeleaf框架。 现象 项目组的另一个小伙伴说,突然有个页面打不开了,整个页面全空白。我F12打开浏览器…

JAVA集合框架 一:Collection(LIst,Set)和Iterator(迭代器)

目录 一、Java 集合框架体系 1.Collection接口:用于存储一个一个的数据,也称单列数据集合(single)。 2.Map接口:用于存储具有映射关系“key-value对”的集合(couple) 3.Iterator接口&#…

pycharm的Terminal中如何设置打开anaconda3的虚拟环境

在pycharm的File -> Settings -> Tools -> Terminal下面,如下图所示 修改为红框中内容,然后关闭终端在重新打开终端,即可看到anaconda3的虚拟环境就已经会被更新

开源语言模型的历史和重要性;Edge浏览器将推出Bing AI重写文本功能

🦉 AI新闻 🚀 微软即将推出桌面版Microsoft Edge浏览器的Bing AI重写文本功能 摘要:微软最近在桌面版Microsoft Edge浏览器中引入了一个新功能,允许用户使用Bing AI重写文本。用户可以选择不同的语气、格式和长度,然…

5、螺旋矩阵

螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。如: 1 2 3 4 10 11 12 5 9 8 7 …

让三驾马车奔腾:华为如何推动空间智能化发展?

上个月,国务院常务会议审议通过了《关于促进家居消费的若干措施》,其中明确提出了“推动单品智能向全屋智能发展创新培育智能消费”“开展数字家庭建设试点”等推动全屋智能拼配发展的建议与方案。 可以说,以整屋为单位的空间智能品类&#x…

神码ai伪原创【php源码】

大家好,小编为大家解答python必备常用英语词汇笔记的问题。很多人还不知道python中常用的英语单词,现在让我们一起来看看吧! 火车头采集ai伪原创插件截图: 一.什么是注释 注释是对一段代码的解释,不参与程序运行&…

LeetCode题解:判断是否能拆分数组

⭐简单说两句⭐ 作者:后端小知识 CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 上周做了力扣周赛的题,给大家分享一个中等题目&#xff…

适用HarmonyOS 3.1版本及以上的应用及服务开发工具 DevEco Studio 3.1.1 Release 安装

文章目录 安装步骤1.下载安装包2.安装成功后,初次运行studio2.1 配置node与ohpm的环境2.2安装sdk2.3等待安装结束 3.创建项目3.1 点击Create Project3.2 选择一个空项目3.3 项目配置3.4 Finish、等待依赖下载完毕3.5 项目创建完成 tip 提示4.配置运行环境4.1 真机运…

C++-使用clang-format格式化代码

clang-format既是一个库,也是一个单独的工具,它可以自动格式化代码。下面我们介绍如何在QtCreator中使用clang-format。 点击帮助->关于插件,勾选Beautifier 重启后,点击工具->选项->Beautifier->Clang Format&…

[保研/考研机试] KY109 Zero-complexity Transposition 上海交通大学复试上机题 C++实现

描述: You are given a sequence of integer numbers. Zero-complexity transposition of the sequence is the reverse of this sequence. Your task is to write a program that prints zero-complexity transposition of the given sequence. 输入描述&#xf…

开发安卓项目kotlin编写时应用闪退

最近在开发一个公司的安卓项目(kotlin和java混合)遇到一个问题卡了半天。 TODO("Not yet implemented")自己实现了一个方法,系统自动生成了 TODO("Not yet implemented")注释。刚开始也没有在意(java开发时常…

【VisualGLM】大模型之 VisualGLM 部署

目录 1. VisualGLM 效果展示 2. VisualGLM 介绍 3. VisualGLM 部署 1. VisualGLM 效果展示 VisualGLM 问答 原始图片 2. VisualGLM 介绍 VisualGLM 主要做的是通过图像生成文字,而 Stable Diffusion 是通过文字生成图像。 一种方法是将图像当作一种特殊的语言进…

Go-Gin框架

一、Gin介绍 Gin是一个用Go编写的HTTPweb框架。它是一个类似于martini但拥有更好性能的API框架, 优于httprouter,速度提高了近 40 倍。 点击此处访问Gin官方中文文档。 二、安装 1、安装Gin go get -u github.com/gin-gonic/gin 2、代码中引入 import "g…

云服务器搭建到使用

云服务器基本搭建 一、搭建二、 配置三、登录 一、搭建 腾讯云为例 1链接进入后选择 国内地域 选择合适的,一般个人学习使用可以选择2核2G就足够了。1核如果需要后面使用就行联合使用可能就比较吃力,比如链接一个vscode来进行g编译。可能体验感就会很差…

网络安全渗透测试之靶场训练

NWES: 7月26号武汉地震检测中心遭受境外具有政府背景的黑客组织和不法分子的网络攻击。 目前网络攻击主要来自以下几种方式: DDOS:分布式拒绝服务攻击。通过制造大量无用的请求向目标服务器发起访问,使其因短时间内无法处理大量请求而陷入瘫痪。主要针对…

在Vue2.0中集成Vform动态表单

目录 一、打包下载源码,引入组件 1、项目地址 2、下载并打包 二、将vform集成到项目中 1、导入v-form-designer、v-form-render两个组件 2、在项目的main.js文件中引入组件,并注册组件 三、注册路由 1、引入VFormDesigner 设计器 2、使用VFor…