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.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包路径是错误的,需要替换为具体的接口路径

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发-JsonModel的学习及使用

IOS JsonModel的学习及使用 当我们从服务端获取到json数据后的时候,我们需要在界面上展示或者保存起来,下面来看下直接通过NSDictionary取出数据的情况。 NSDictionary直接取出数据的诟病。 NSString *name [self.responseObj objectForKey:"nam…

Flink源码之JobManager启动流程

从启动命令flink-daemon.sh中可以看出StandaloneSession入口类为org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint, 从该类的main方法会进入ClusterEntrypoint::runCluster中, 该方法中会创建出主要服务和组件。 StandaloneSessionClusterEntrypoint:…

Maven进阶1 -- 分模块开发、依赖管理、聚合与继承、属性、版本管理、多环境开发、跳过测试

目录 1.分模块开发 将原始模块按照功能拆分成若干个子模块&#xff0c;方便模块间的相互调用&#xff0c;接口共享。 案例&#xff1a;拆分一下这个SSM整合案例 ①创建maven模块 demo项目下的pom.xml文件&#xff08;主要看一下依赖&#xff09; <dependencies><!…

黑马头条项目学习--Day2: app端文章查看,静态化freemarker,分布式文件系统minIO

app端文章 Day02: app端文章查看&#xff0c;静态化freemarker,分布式文件系统minIOa. app端文章列表查询1) 需求分析2) 实现思路 b. app端文章详细1) 需求分析2) Freemarker概述a) 基础语法种类b) 集合指令&#xff08;List和Map&#xff09;c) if指令d) 运算符e) 空值处理f) …

GIS在地质灾害危险性评估与灾后重建中的应用教程

详情点击链接&#xff1a;GIS在地质灾害危险性评估与灾后重建中的实践技术应用 前言 地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质…

《合成孔径雷达成像算法与实现》Figure3.7

代码复现如下&#xff1a; clc clear all close all%参数设置 TBP 100; %时间带宽积 T 10e-6; %脉冲持续时间%参数计算 B TBP/T; …

MySQL — InnoDB介绍

文章目录 InnoDB 主要特点InnoDB 架构In-Memory StructuresBuffer PoolChange BufferAdaptive Hash IndexLog Buffer On-Disk StructuresSystem TablespaceFile-Per-Table TablespacesGeneral TablespacesUndo TablespacesTemporary TablespacesDoublewrite BufferRedo LogUndo…

半导体器件||的学习

电子管的介绍&#xff1a; 到底什么是电子管&#xff08;真空管&#xff09;&#xff1f; - 知乎 芯片破壁者&#xff08;一&#xff09;&#xff1a;从电子管到晶体管“奇迹”寻踪 - 知乎 晶体管&#xff1a; 什么是晶体管&#xff1f;它有什么作用&#xff1f; - 知乎 改…

多个配置WebMvcConfigurationSupport失效问题

最近在项目中用类继承WebMvcConfigurationSupport实现拦截器 Configuration RequiredArgsConstructor public class SpringWebSupport extends WebMvcConfigurationSupport {private final ProjectInterceptor projectInterceptor;// 拦截器 //设置拦截器对象和拦截请求Ove…

java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis em

​ 鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内…

5G RedCap

5G RedCap指的是3GPP所提出的5G标准。与之前发布的5G标准相比&#xff0c;功能更加精简。5G RedCap于2019年6月首次被纳入3GPP R17研究项目。 把一些不必要的功能去掉就可以带来模组价格的降低。背后的基本想法是&#xff1a;为物联网应用定义一种新的、不那么复杂的NR设备。 …

php实现登录的例子

界面&#xff1a; 登录界面login.html代码&#xff1a; <!DOCUMENT html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"…

Java中String方法魔性学习

这里写目录标题 先进行专栏介绍String详解常用构造方法代码演示常用成员方法代码示例总结 先进行专栏介绍 本专栏是自己学Java的旅途&#xff0c;纯手敲的代码&#xff0c;自己跟着黑马课程学习的&#xff0c;并加入一些自己的理解&#xff0c;对代码和笔记 进行适当修改。希望…

循环队列详解

1. 循环队列 1.1 概念及结构 循环队列是一种特殊类型的队列数据结构&#xff0c;也被称为”唤醒缓冲器“。它在数组的基础上实现了循环利用空间的功能。在循环队列中&#xff0c;队尾和队头之间形成了一个循环&#xff0c;当队尾指针“追上”队头指针时&#xff0c;队列不再继…

OpenAI允许网站阻止其网络爬虫;谷歌推出类似Grammarly的语法检查功能

&#x1f989; AI新闻 &#x1f680; OpenAI推出新功能&#xff0c;允许网站阻止其网络爬虫抓取数据训练GPT模型 摘要&#xff1a;OpenAI最近推出了一个新功能&#xff0c;允许网站阻止其网络爬虫从其网站上抓取数据训练GPT模型。该功能通过在网站的Robots.txt文件中禁止GPTB…

【前端 | CSS】flex布局

基本概念 Flexible模型&#xff0c;通常被称为 flexbox&#xff0c;是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力 我们说 flexbox 是一种一维的布局&#xff0c;是因为一个 flexbox 一次只能处理一个维度上的元素布局&#xff0c;一行或者…

vscode运行python报错:ModuleNotFoundError:No module named ‘xxx‘

在乌班图上使用pycharm的时候&#xff0c;pycharm总是莫名其妙卡死&#xff0c;又说是搜狗输入法的锅&#xff0c;又说别的原因&#xff0c;一气之下不用pycharm,转到vscode上&#xff0c;没想到出现了如下报错。 就是vscode在运行python的时候&#xff0c;自定义模块的调用无…

03.利用Redis实现缓存功能---解决缓存穿透版

学习目标&#xff1a; 提示&#xff1a;学习如何利用Redis实现添加缓存功能解决缓存穿透版 学习产出&#xff1a; 缓存穿透讲解图&#xff1a; 解决方案&#xff1a; 采用缓存空对象采用布隆过滤器 解决方案流程图&#xff1a; 1. 准备pom环境 <dependency><gro…

Redis储存结构

Redis怎么储存的 这个redisDb是数据库对象 里面的其他字段忽略了 然后里面有个dict列表(字典列表) 我们随便来看一个redisObject 区分一下子啊 他这个dict里面没有存redisObject的对象 也没有存dict对象 它只是存了个数据指针 你看那个redis每个底层编码 抠搜的 这块要是再保存…

gin和gorm框架安装

理论上只要这两句命令 go get -u gorm.io/gorm go get -u github.com/gin-gonic/gin然而却出现了问题 貌似是代理问题&#xff0c;加上一条命令 go env -w GOPROXYhttps://goproxy.cn,direct 可以成功安装 安装gorm的数据库驱动程序 go get -u gorm.io/driver/mysql