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

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.javapackage 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 {@Overridepublic 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-providerprotocol:name: dubboport: -1registry:id: zk-registryaddress: zookeeper://127.0.0.1:2181config-center:address: zookeeper://127.0.0.1:2181metadata-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.javapublic class ConsumerApplication {@DubboReferenceprivate DemoService demoService;
}
6. 定义 application.yml
dubbo-samples-spring-boot-consumer/application.ymldubbo:application:name: dubbo-springboot-demo-consumerprotocol:name: dubboport: -1registry:id: zk-registryaddress: zookeeper://127.0.0.1:2181config-center:address: zookeeper://127.0.0.1:2181metadata-report:address: zookeeper://127.0.0.1:21817. 加载 Spring 配置,并调用远程服务
dubbo-samples-spring-boot-consumer/ConsumerApplication.java@SpringBootApplication
@Service
@EnableDubbo
public class ConsumerApplication {@DubboReferenceprivate 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.mzph.cn/news/28456.shtml

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

相关文章

windows环境下安装elasticsearch、kibana

通过本文可以快速在windows系统上安装elasticsearch、kibana环境。 当你用Integer类型的时候,要非常小心,因为100等于100、但是200不等于200,当然,如果你会一点小花招,也可以让100不等于100、让200等于200。(运算符比较…

CSS 盒模型是什么?它包含哪些属性?标准盒模型/怪异盒模型

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 盒模型⭐ 标准盒模型⭐ 怪异盒模型⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感…

深度学习中的优化算法

文章目录 前言一、优化和深度学习1.1 优化的目标1.2 深度学习中的优化挑战1.2.1 局部最小值1.2.2 鞍点1.2.3 梯度消失 二、梯度下降2.1 一维梯度下降2.1.1 学习率 2.2 多元梯度下降2.3 自适应方法2.3.1 牛顿法2.3.2 其他自适应方法 三、随机梯度下降3.1 随机梯度更新3.2 动态学…

Go-Gin框架

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

安路FPGA的赋值报错——移位处理,加括号

authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 在使用移位符号用来当作除以号使用时,发现如下问题 其中 cnt_8K 为偶数和奇数时输出的数据不一样 reg [10:0] cnt_8K; reg [10:0] ram1_addra; always(posedge clk_16M) begin if(ram_out_flag )begin if(…

【flink】Checkpoint expired before completing.

使用flink同步数据出现错误Checkpoint expired before completing. 11:32:34,455 WARN org.apache.flink.runtime.checkpoint.CheckpointFailureManager [Checkpoint Timer] - Failed to trigger or complete checkpoint 4 for job 1b1d41031ea45d15bdb3324004c2d749. (2 con…

换架 3D 飞机,继续飞呀飞

相信大多数图扑 HT 用户都曾见过这个飞机的 Demo,在图扑发展的这十年,这个 Demo 是许多学习 HT 用户一定会参考的经典 Demo 之一。 这个 Demo 用简洁的代码生动地展示了 OBJ 模型加载、数据绑定、动画和漫游等功能的实现。许多用户参考这个简单的 Demo 后…

kubernetes 集群命令行工具 kubectl

1、kubectl 概述 kubectl是一种命令行工具,用于管理Kubernetes集群和与其相关的资源。通过kubectl,您可以查看和管理Pod、Deployment、Service、Volume、ConfigMap等资源,也可以创建、删除和更新它们。 kubectl还提供了许多其他功能&#x…

中国信通院腾讯安全发布《2023数据安全治理与实践白皮书》

导读 腾讯科技(深圳)有限公司和中国信息通信研究院云计算与大数据研究所共同编制了本报告。本报告提出了覆盖组织保障、管理流程、技术体系的以风险为核心的数据安全治理体系,并选取了云场景、互娱、社交等场景,介绍相应场景下数据安全治理实践路线及主…

【Vue】使用print.js插件实现打印预览功能,超简单

目录 一、实现效果 二、实现步骤 【1】安装插件 【2】在需要打印的页面导入 【3】在vue文件中需要打印的部分外层套一层div,给div设置id。作为打印的区域 【4】在打印按钮上添加打印事件 【5】在methods中添加点击事件 三、完整代码 一、实现效果 二、实现步…

16-2_Qt 5.9 C++开发指南_使用样式表Qss自定义界面

进行本篇介绍学习前,请先参考链接01_1_Qt工程实践_Qt样式表Qss,后再结合本篇进行融合学习如何使用样式表定义界面。 文章目录 1. Qt样式表2. Qt样式表句法2.1 一般句法格式2.2 选择器 (selector)2.3 子控件(sub-controls)2.4 伪状…

构建Docker容器监控系统(cadvisor+influxDB+grafana)

目录 一、部署 1、安装docker-cd 2、阿里云镜像加速 3、下载组件镜像 4、创建自定义网络 5、创建influxdb容器 6、创建Cadvisor 容器 7、创建granafa容器 一、部署 1、安装docker-cd [rootlocalhost ~]# iptables -F [rootlocalhost ~]# setenforce 0 setenforce: SELi…

RS485实验

RS485实验 介绍 RS485采用差分信号进行传输,半双工通信。RS485是一个总线,在同一总线上最多可以挂接32个节点。通信流程简单理解为默认为接收状态,发送数据时切换为发送状态,数据发送完毕后切换为接收状态。发送和接收分别由一个…

[考研机试] KY20 完数VS盈数 清华大学复试上机题 C++实现

描述 一个数如果恰好等于它的各因子(该数本身除外)子和,如:6321。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。 输入描述: 题目没有任何输入。 输出描述&#…

MachineLearningWu_13/P60-P64_Tensorflow

P60-P64的学习目录如下, x.1 TF网络模型实现 以一个简单的TF的分类网络为例,将模型翻译成框架下的语义,即如右侧所表达的。 当然上面对于分类网络的解释是一个简洁的解释,我们来进行更加具象的了解一下。左边是机器学习的三步骤&…

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

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

文章采集伪原创发布工具-147采集

在当今信息爆炸的时代,企业和个人都意识到了获取高质量、原创的内容的重要性。然而,手动撰写大量的原创内容是一项耗时费力的任务。为了解决这个问题,我向您介绍一款颠覆性的数据采集工具——147采集。 147采集是一款专业且高效的数据采集软件…

Linux安装配置nginx+php搭建以及在docker中配置

Linux安装配置nginxphp搭建以及在docker中配置 文章目录 Linux安装配置nginxphp搭建以及在docker中配置1.nginx源码包编译环境和安装相应的依赖1.1 安装编译环境1.2 安装pcre库、zlib库和openssl库 2.安装nginx2.1 在[nginx官网](https://nginx.org/en/download.html)上获取源码…

IDEA 指定spring.profiles.active本地启动

spring.profiles.activedev spring.profiles.activepro

Android开发实践:Android.mk模板

关于Android NDK开发的文章已经比较多了,我的博客中也分享了很多NDK开发相关经验和技巧,今天简单写了一个 Android.mk 的示例模板,供初学者参考。 本模板主要给大家示例 Android NDK 开发中的如下几个问题: 如何自动添加需要编译…