上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

Jmeter对RabbitMQ压力测试

guduadmin11天前

  • 环境准备
    1. 安装jmeter安装包
    1. 下载jmeter

    链接:Apache JMeter - Download Apache JMeter

    Jmeter对RabbitMQ压力测试,第1张

    1. 解压jmeter压缩包

    apache-jmeter-5.5.zip

    Jmeter对RabbitMQ压力测试,第2张

    1. JMeter环境变量配置
    1. 找到 此电脑右键-【属性】-【高级系统设置】-【环境变量】

    Jmeter对RabbitMQ压力测试,第3张

    1. 新建系统变量 JMETER_HOME

    变量名:JMETER_HOME

    变量值:jmeter的安装路径。例如:D:\下载的软件\Jmeter\apache-jmeter-5.5

    Jmeter对RabbitMQ压力测试,第4张

    1. 编辑变量名 Path

    新增环境变量:

    %JMETER_HOME%\bin

    Jmeter对RabbitMQ压力测试,第5张

    1. 安装jdk
    1. 下载地址

    https://www.oracle.com/java/technologies/downloads/#jdk18-windows

    Jmeter对RabbitMQ压力测试,第6张

    1. 解压安装jdk压缩包
    1. 新建一个文件夹用于安装jdk,新建的文件夹名字最好是全英文;否则安装过程中可能会出现安装失败的情况

    Jmeter对RabbitMQ压力测试,第7张

    1. 按照安装向导一步步往下走

    Jmeter对RabbitMQ压力测试,第8张

    Jmeter对RabbitMQ压力测试,第9张

    Jmeter对RabbitMQ压力测试,第10张

    Jmeter对RabbitMQ压力测试,第11张

    Jmeter对RabbitMQ压力测试,第12张

    Jmeter对RabbitMQ压力测试,第13张

    1. Jdk环境变量配置
    1. 找到 此电脑右键-【属性】-【高级系统设置】-【环境变量】

    Jmeter对RabbitMQ压力测试,第14张

    1. 新建系统变量 JAVA_HOME

    变量名:JAVA_HOME

    变量值:jdk的安装路径。例如:D:\Tools\JDK

    Jmeter对RabbitMQ压力测试,第15张

    1. 新建系统变量 CLASSPATH

    变量名:CLASSPATH

    变量值:

    .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;

    Jmeter对RabbitMQ压力测试,第16张

    1. 编辑变量名 Path

    新增环境变量:

    %JAVA_HOME%\bin

    %JAVA_HOME%\jre\bin

    Jmeter对RabbitMQ压力测试,第17张

    Jmeter对RabbitMQ压力测试,第18张

    1. 检验是否配置成功

    打开命令提示符,输入 java -version

    展示以下内容即为配置成功

    Jmeter对RabbitMQ压力测试,第19张

    1. 安装AMQP插件
    1. 下载地址

    GitHub - jlavallee/JMeter-Rabbit-AMQP: A JMeter plugin to publish & consume messages from RabbitMQ or any AMQP message broker

    Jmeter对RabbitMQ压力测试,第20张

    1. 解压AMQP插件

    Jmeter对RabbitMQ压力测试,第21张

    1. 电脑安装apache-ant
    1. 下载地址

    https://dlcdn.apache.org//ant/binaries/apache-ant-1.9.16-bin.zip

    1. 解压apache-ant安装包

    Jmeter对RabbitMQ压力测试,第22张

    Jmeter对RabbitMQ压力测试,第23张

    1. apache-ant配置环境变量

    Jmeter对RabbitMQ压力测试,第24张

     Jmeter对RabbitMQ压力测试,第25张

    1. 下载 RabbitMQ客户端插件amqp-client-3.4.4.jar
    1. 下载地址

    https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/3.4.4/amqp-client-3.4.4.jar

    Jmeter对RabbitMQ压力测试,第26张

    1. 修改配置文件
    1. 修改AMQP插件源码里的build.xml,http改成https

    Jmeter对RabbitMQ压力测试,第27张

    Jmeter对RabbitMQ压力测试,第28张

    1. 修改build.xml里面ivy.install.version,2.3.0改成2.5.0

    Jmeter对RabbitMQ压力测试,第29张

    1. 打包生成JMeterAMQP.jar

    直接在AMQP插件所在目录,执行ant命令即可

    Jmeter对RabbitMQ压力测试,第30张

     Jmeter对RabbitMQ压力测试,第31张

    1. 插件复制插件到jmeter目录
    1. 把上面下载的amqp-client-3.4.4.jar复制到jmeter安装目录的lib\ext目录下

    Jmeter对RabbitMQ压力测试,第32张

    1. 把AMQP插件源码目录下target\dist目录下的JMeterAMQP.jar也复制到lib\ext目录下

    Jmeter对RabbitMQ压力测试,第33张

    Jmeter对RabbitMQ压力测试,第34张

    1. 启动jmeter的时候就出现rabbitmq测试的取样器

    Jmeter对RabbitMQ压力测试,第35张

    Jmeter对RabbitMQ压力测试,第36张

    • jmeter对rabbitmq进行性能测试
      1. 新建线程组

      Jmeter对RabbitMQ压力测试,第37张

      1. 新建AMQP Publisher

      Jmeter对RabbitMQ压力测试,第38张

      Jmeter对RabbitMQ压力测试,第39张

      1. 新建AMQP Consumer

      Jmeter对RabbitMQ压力测试,第40张

      1. 启动查看结果树

      Jmeter对RabbitMQ压力测试,第41张

      1. 启动聚合报告

      Jmeter对RabbitMQ压力测试,第42张

      1. 查看rabbitmq控制台

      Jmeter对RabbitMQ压力测试,第43张

      • 脚本文件

        将下述文件的内容保存到一个rabbitmq.jmx,打开后修改rabbitmq的主机配置以及账号密码

        
        
          
            
              
              false
              true
              
                
              
              
            
            
              
                stoptest
                
                  false
                  1
                
                2
                10
                false
                10
                
                true
              
              
                
                  
                    hostname
                    port
                    username
                    password
                    queuename
                  
                  
                    
                      1.1.2.2
                      3xxx
                      defauweR0
                      8gG558p1_H-Jz9L
                      zytest-1
                    
                  
                  false
                
                
                
                  true
                  1
                
                
                  
                    zyjmeterExchange
                    true
                    true
                    false
                    zytest-1
                    zytest-1
                    /
                    
                    
                    direct
                    true
                    false
                    false
                    false
                    5000
                    1
                    10.10.21.29
                    3214
                    default_user_fZzFDUx3r-0As9gFfOl
                    4hYbpm_if3KK0RuMV42tTrfSoYZOvL5U
                    false
                    false
                    false
                    zytest-1
                    hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.hello,rabbitmq.helo
                    
                    
                    
                    text/plain 
                    
                    
                      
                    
                  
                  
                
                
                  zyjmeterExchange
                  true
                  true
                  false
                  zytest-1
                  zytest-1
                  /
                  
                  
                  direct
                  true
                  false
                  false
                  false
                  1000
                  100
                  ${hostname}
                  ${port}
                  ${username}
                  ${password}
                  false
                  true
                  0
                  
                  false
                  true
                  false
                
                
                
                  false
                  
                    saveConfig
                    
                      
                      true
                      true
                      true
                      
                      true
                      true
                      true
                      true
                      false
                      true
                      true
                      false
                      false
                      false
                      true
                      false
                      false
                      false
                      true
                      0
                      true
                      true
                      true
                      true
                      true
                      true
                    
                  
                  
                
                
                
                  false
                  
                    saveConfig
                    
                      
                      true
                      true
                      true
                      
                      true
                      true
                      true
                      true
                      false
                      true
                      true
                      false
                      false
                      false
                      true
                      false
                      false
                      false
                      true
                      0
                      true
                      true
                      true
                      true
                      true
                      true
                    
                  
                  
                
                
              
            
          
        

        • 参数说明
          1. AMQP Publisher参数说明

          Jmeter对RabbitMQ压力测试,第44张

          1. 采样器的名称和备注。这是JMeter所有采样器的属性,用来进行线程组的采样管理。建议取有意义的名字。
          2. 交换机信息。如果需要发送的MQ消息是以交换机的方式进行消息传递,需要配置。如果不需要则配置“Exchange”属性为空即可。具体的属性含义如下。

          Exchange:交换机名称,默认为jmeterExchange。RabbitMQ消息传递通过交换机或队列模型进行,需要根据实际系统定义情况进行配置。

          Exchange Type:交换机类型,规定了消息的路由策略,根据实际的消息交换机类型进行配置,可选为direct,topic,headers,fanout。

          Durable?:交换机的持久化属性。持久化队列和非持久化队列的区别是,持久化队列会被保存在磁盘中,固定并持久的存储,当服务重启后,该队列会保持原来的状态在RabbitMQ中被管理,而非持久化队列不会被保存在磁盘中,服务重启后队列就会消失。

          Auto Delete?:交换机的自动删除属性。如果该交换机没有任何订阅的消费者的话,该交换机会被自动删除。这种队列适用于临时队列。

          Redeclare?:该交换机是否可以重新声明。当声明的交换机Durable?或者Auto Delete?与已经存在交换机不一致,会出现类似如下错误:

          Caused by:com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method(reply-code=406,reply-text=PRECONDITION_FAILED - inequivalent arg 'durable' for exchange'jmeterExchange' in vhost '/': received 'false' butcurrent is 'true', class-id=40, method-id=10)

          所以AMQP插件增加了重新声明属性,当交换机声明与已经存在的不一致时,如果勾选了可重新声明,会将原交换机删除,重新定义一个新的。

          3、队列信息。如果需要发送的MQ消息是以队列的方式进行消息传递,需要配置。如果不需要则配置“Queue”属性为空即可。具体的属性含义如下。

          Queue:队列名称,默认为jmeterQueue。

          Routing Key:队列的路由关键字,通过路由关键字的设定,可以完成多个消息统一处理的需求。对于队列的方式,需要与队列名称一致。

          Durable?、Auto Delete?、Redeclare?属性的作用与交换机类似。

          Exclusive?:队列的排他性属性。如果想创建一个只有自己可见的队列,即不允许其它用户访问,可以将一个Queue声明成为排他性的(Exclusive Queue)。

          Message TTL:Time-To-Live,消息过期时间,单位为毫秒。

          Expires:队列的超期时间,单位为毫秒。该值必须为正数(与消息 TTL 不同,该值不可以为 0),所以如果该参数设置为 1000 ,则表示该队列如果在 1 秒钟之内未被使用则会被删除。

          4、RabbitMQ服务信息。RabbitMQ服务的连接信息。具体包括如下属性。

          Virtual HOST:使用的RabbitMQ服务虚拟主机信息。通过虚拟主机可以在服务器上划分多个虚拟空间,起到消息隔离的作用,默认为根目录“/”。

          Host:RabbitMQ服务所在主机IP或名称,使用名称时需要保证DNS正确性。

          Port:RabbitMQ服务所在端口,默认为5672。

          Username:使用RabbitMQ服务的用户名。

          Password:使用RabbitMQ服务的密码。

          Timeout:连接RabbitMQ服务的超时时间,单位为毫秒。

          Jmeter对RabbitMQ压力测试,第45张

          1、发送消息条数。Number ofsamples to Aggregate表示AMQP采样器工作一次发送几条消息。

          2、消息属性。具体包括如下信息。

          Persistent?:消息的持久化属性。设置了持久化的消息,即使当时Consumer没有在监听,等Consumer启动后也能够收到该消息。反之,如果当时Consumer没有监听,则无法获取消息。

          Use Transactions?:是否将发送消息通道设置为事务模式。事务能够解决Publisher与消息服务之间消息确认的问题,只有消息成功被服务接受,事务提交才能成功,否则我们便可以在捕获异常进行事务回滚操作同时进行消息重发,但是使用事务机制的话会降低RabbitMQ的性能。

          Routing Key:消息的路由关键字。队列方式需要与队列名称一致,交换机方式根据实际需求设定。

          Message Type:消息类型属性。可以自定义消息的类型,如String,Object等。

          Reply-To Queue:用于指定回复的队列的名称。该属性是业务流程的需要,不会自动创建指定的回复队列。

          Correlation Id:消息的关联ID。当存在多个计算节点时,通过该属性是的每个线程确定收到的消息与该线程对应。

          ContentType:消息扩展类型。与HTTP中的相同字段意义一致,可以是text/plain,JSON等。

          Message Id:消息的ID。通过设定消息ID,完成业务上的某些需求。

          3、消息头信息。Key-value格式设置头信息,可以是任意的进行业务逻辑的数据。

          1. 消息体。实际发送的消息内容,可以通过增加字符的方式修改消息体内容大小(1kb,10kb,50kb,100kb)
          1. AMQP Consumer参数说明

          Jmeter对RabbitMQ压力测试,第46张

          1. 采样器的名称和备注。这是JMeter所有采样器的属性,用来进行线程组的采样管理。建议取有意义的名字。
          2. 交换机信息。如果需要发送的MQ消息是以交换机的方式进行消息传递,需要配置。如果不需要则配置“Exchange”属性为空即可。具体的属性含义如下。

          Exchange:交换机名称,默认为jmeterExchange。RabbitMQ消息传递通过交换机或队列模型进行,需要根据实际系统定义情况进行配置。

          Exchange Type:交换机类型,规定了消息的路由策略,根据实际的消息交换机类型进行配置,可选为direct,topic,headers,fanout。

          Durable?:交换机的持久化属性。持久化队列和非持久化队列的区别是,持久化队列会被保存在磁盘中,固定并持久的存储,当服务重启后,该队列会保持原来的状态在RabbitMQ中被管理,而非持久化队列不会被保存在磁盘中,服务重启后队列就会消失。

          Auto Delete?:交换机的自动删除属性。如果该交换机没有任何订阅的消费者的话,该交换机会被自动删除。这种队列适用于临时队列。

          Redeclare?:该交换机是否可以重新声明。当声明的交换机Durable?或者Auto Delete?与已经存在交换机不一致,会出现类似如下错误:

          Caused by:com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method(reply-code=406,reply-text=PRECONDITION_FAILED - inequivalent arg 'durable' for exchange'jmeterExchange' in vhost '/': received 'false' butcurrent is 'true', class-id=40, method-id=10)

          所以AMQP插件增加了重新声明属性,当交换机声明与已经存在的不一致时,如果勾选了可重新声明,会将原交换机删除,重新定义一个新的。

          3、队列信息。如果需要发送的MQ消息是以队列的方式进行消息传递,需要配置。如果不需要则配置“Queue”属性为空即可。具体的属性含义如下。

          Queue:队列名称,默认为jmeterQueue。

          Routing Key:队列的路由关键字,通过路由关键字的设定,可以完成多个消息统一处理的需求。对于队列的方式,需要与队列名称一致。

          Durable?、Auto Delete?、Redeclare?属性的作用与交换机类似。

          Exclusive?:队列的排他性属性。如果想创建一个只有自己可见的队列,即不允许其它用户访问,可以将一个Queue声明成为排他性的(Exclusive Queue)。

          Message TTL:Time-To-Live,消息过期时间,单位为毫秒。

          Expires:队列的超期时间,单位为毫秒。该值必须为正数(与消息 TTL 不同,该值不可以为 0),所以如果该参数设置为 1000 ,则表示该队列如果在 1 秒钟之内未被使用则会被删除。

          4、RabbitMQ服务信息。RabbitMQ服务的连接信息。具体包括如下属性。

          Virtual HOST:使用的RabbitMQ服务虚拟主机信息。通过虚拟主机可以在服务器上划分多个虚拟空间,起到消息隔离的作用,默认为根目录“/”。

          Host:RabbitMQ服务所在主机IP或名称,使用名称时需要保证DNS正确性。

          Port:RabbitMQ服务所在端口,默认为5672。

          Username:使用RabbitMQ服务的用户名。

          Password:使用RabbitMQ服务的密码。

          Timeout:连接RabbitMQ服务的超时时间,单位为毫秒。

          Jmeter对RabbitMQ压力测试,第47张

          1、接收设置。接收消息本身的属性。

          Number of samples to Aggregate表示AMQP采样器工作一次消费几条消息。

          Reccive Timeout:接收超时时间。即等待设置时间没有收到消息则退出,单位毫秒。

          PrefetchCount:直观理解是预先获取的消息条数。Prefetch Count允许为每个Consumer指定最大的unacked messages数目。简单来说就是用来指定一个Consumer一次可以从消息中心中获取多少条message并缓存。一旦缓冲区满了,会停止投递新的message给该Consumer,直到它发出ack。

          2、队列操作。接收消息时对队列本身的处理。具体包括如下信息。

          Purge Queue:清除队列。消费消息后将队列清空。

          Auto ACK:自动应答属性。在订阅消息的时候可以指定应答模式,当自动应答等于true的时候,表示当消费者一收到消息就表示消费者收到了消息,消费者收到了消息就会立即从队列中删除。

          Read Response:读取消息内容。一般情况都是要读取消息体的。

          UseTransactions?:与AMQP Publisher含义一致。

          • 问题收集

            • 备注

网友评论

搜索
最新文章
热门文章
热门标签