Jmeter对RabbitMQ压力测试

这篇具有很好参考价值的文章主要介绍了Jmeter对RabbitMQ压力测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

链接:Apache JMeter - Download Apache JMeter

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 解压jmeter压缩包

apache-jmeter-5.5.zip

jmeter压测rabbitmq,rabbitmq,jmeter

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

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 新建系统变量 JMETER_HOME

变量名:JMETER_HOME

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

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 编辑变量名 Path

新增环境变量:

%JMETER_HOME%\bin

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 安装jdk
  1. 下载地址

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

jmeter压测rabbitmq,rabbitmq,jmeter

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

jmeter压测rabbitmq,rabbitmq,jmeter

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

jmeter压测rabbitmq,rabbitmq,jmeter

jmeter压测rabbitmq,rabbitmq,jmeter

jmeter压测rabbitmq,rabbitmq,jmeter

jmeter压测rabbitmq,rabbitmq,jmeter

jmeter压测rabbitmq,rabbitmq,jmeter

jmeter压测rabbitmq,rabbitmq,jmeter

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

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 新建系统变量 JAVA_HOME

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

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 新建系统变量 CLASSPATH

变量名:CLASSPATH
变量值:

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

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 编辑变量名 Path

新增环境变量:

%JAVA_HOME%\bin

%JAVA_HOME%\jre\bin

jmeter压测rabbitmq,rabbitmq,jmeter

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 检验是否配置成功

打开命令提示符,输入 java -version
展示以下内容即为配置成功

jmeter压测rabbitmq,rabbitmq,jmeter

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

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

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 解压AMQP插件

jmeter压测rabbitmq,rabbitmq,jmeter

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

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

  1. 解压apache-ant安装包

jmeter压测rabbitmq,rabbitmq,jmeter

jmeter压测rabbitmq,rabbitmq,jmeter

  1. apache-ant配置环境变量

jmeter压测rabbitmq,rabbitmq,jmeter

 jmeter压测rabbitmq,rabbitmq,jmeter

  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,rabbitmq,jmeter

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

jmeter压测rabbitmq,rabbitmq,jmeter

jmeter压测rabbitmq,rabbitmq,jmeter

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

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 打包生成JMeterAMQP.jar

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

jmeter压测rabbitmq,rabbitmq,jmeter

 jmeter压测rabbitmq,rabbitmq,jmeter

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

jmeter压测rabbitmq,rabbitmq,jmeter

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

jmeter压测rabbitmq,rabbitmq,jmeter

jmeter压测rabbitmq,rabbitmq,jmeter

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

jmeter压测rabbitmq,rabbitmq,jmeter

jmeter压测rabbitmq,rabbitmq,jmeter

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

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 新建AMQP Publisher

jmeter压测rabbitmq,rabbitmq,jmeter

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 新建AMQP Consumer

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 启动查看结果树

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 启动聚合报告

jmeter压测rabbitmq,rabbitmq,jmeter

  1. 查看rabbitmq控制台

jmeter压测rabbitmq,rabbitmq,jmeter

  • 脚本文件

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

<?xml version="1.0" encoding="UTF-8"?>

<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.5">

  <hashTree>

    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="测试计划" enabled="true">

      <stringProp name="TestPlan.comments"></stringProp>

      <boolProp name="TestPlan.functional_mode">false</boolProp>

      <boolProp name="TestPlan.serialize_threadgroups">true</boolProp>

      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">

        <collectionProp name="Arguments.arguments"/>

      </elementProp>

      <stringProp name="TestPlan.user_define_classpath"></stringProp>

    </TestPlan>

    <hashTree>

      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="线程组" enabled="true">

        <stringProp name="ThreadGroup.on_sample_error">stoptest</stringProp>

        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">

          <boolProp name="LoopController.continue_forever">false</boolProp>

          <stringProp name="LoopController.loops">1</stringProp>

        </elementProp>

        <stringProp name="ThreadGroup.num_threads">2</stringProp>

        <stringProp name="ThreadGroup.ramp_time">10</stringProp>

        <boolProp name="ThreadGroup.scheduler">false</boolProp>

        <stringProp name="ThreadGroup.duration">10</stringProp>

        <stringProp name="ThreadGroup.delay"></stringProp>

        <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>

      </ThreadGroup>

      <hashTree>

        <UserParameters guiclass="UserParametersGui" testclass="UserParameters" testname="用户参数" enabled="false">

          <collectionProp name="UserParameters.names">

            <stringProp name="-299803597">hostname</stringProp>

            <stringProp name="3446913">port</stringProp>

            <stringProp name="-265713450">username</stringProp>

            <stringProp name="1216985755">password</stringProp>

            <stringProp name="-1738693860">queuename</stringProp>

          </collectionProp>

          <collectionProp name="UserParameters.thread_values">

            <collectionProp name="1819310027">

              <stringProp name="275943087">1.1.2.2</stringProp>

              <stringProp name="48578295">3xxx</stringProp>

              <stringProp name="1211207374">defauweR0</stringProp>

              <stringProp name="-909111453">8gG558p1_H-Jz9L</stringProp>

              <stringProp name="1306055093">zytest-1</stringProp>

            </collectionProp>

          </collectionProp>

          <boolProp name="UserParameters.per_iteration">false</boolProp>

        </UserParameters>

        <hashTree/>

        <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">

          <boolProp name="LoopController.continue_forever">true</boolProp>

          <stringProp name="LoopController.loops">1</stringProp>

        </LoopController>

        <hashTree>

          <com.zeroclue.jmeter.protocol.amqp.AMQPPublisher guiclass="com.zeroclue.jmeter.protocol.amqp.gui.AMQPPublisherGui" testclass="com.zeroclue.jmeter.protocol.amqp.AMQPPublisher" testname="AMQP Publisher-生产者" enabled="true">

            <stringProp name="AMQPSampler.Exchange">zyjmeterExchange</stringProp>

            <boolProp name="AMQPSampler.ExchangeDurable">true</boolProp>

            <boolProp name="AMQPSampler.ExchangeAutoDelete">true</boolProp>

            <boolProp name="AMQPSampler.ExchangeRedeclare">false</boolProp>

            <stringProp name="AMQPSampler.Queue">zytest-1</stringProp>

            <stringProp name="AMQPSampler.RoutingKey">zytest-1</stringProp>

            <stringProp name="AMQPSampler.VirtualHost">/</stringProp>

            <stringProp name="AMQPSampler.MessageTTL"></stringProp>

            <stringProp name="AMQPSampler.MessageExpires"></stringProp>

            <stringProp name="AMQPSampler.ExchangeType">direct</stringProp>

            <stringProp name="AMQPSampler.QueueDurable">true</stringProp>

            <stringProp name="AMQPSampler.QueueExclusive">false</stringProp>

            <stringProp name="AMQPSampler.QueueAutoDelete">false</stringProp>

            <boolProp name="AMQPSampler.Redeclare">false</boolProp>

            <stringProp name="AMQPSampler.Timeout">5000</stringProp>

            <stringProp name="AMQPSampler.Iterations">1</stringProp>

            <stringProp name="AMQPSampler.Host">10.10.21.29</stringProp>

            <stringProp name="AMQPSampler.Port">3214</stringProp>

            <stringProp name="AMQPSampler.Username">default_user_fZzFDUx3r-0As9gFfOl</stringProp>

            <stringProp name="AMQPSampler.Password">4hYbpm_if3KK0RuMV42tTrfSoYZOvL5U</stringProp>

            <stringProp name="AMQPSampler.SSL">false</stringProp>

            <boolProp name="AMQPPublisher.Persistent">false</boolProp>

            <boolProp name="AMQPPublisher.UseTx">false</boolProp>

            <stringProp name="AMQPPublisher.MessageRoutingKey">zytest-1</stringProp>

            <stringProp name="AMQPPublisher.Message">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</stringProp>

            <stringProp name="AMQPPublisher.MessageType"></stringProp>

            <stringProp name="AMQPPublisher.ReplyToQueue"></stringProp>

            <stringProp name="AMQPPublisher.CorrelationId"></stringProp>

            <stringProp name="AMQPPublisher.ContentType">text/plain </stringProp>

            <stringProp name="AMQPPublisher.MessageId"></stringProp>

            <elementProp name="AMQPPublisher.Headers" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">

              <collectionProp name="Arguments.arguments"/>

            </elementProp>

          </com.zeroclue.jmeter.protocol.amqp.AMQPPublisher>

          <hashTree/>

        </hashTree>

        <com.zeroclue.jmeter.protocol.amqp.AMQPConsumer guiclass="com.zeroclue.jmeter.protocol.amqp.gui.AMQPConsumerGui" testclass="com.zeroclue.jmeter.protocol.amqp.AMQPConsumer" testname="AMQP Consumer-消费者" enabled="false">

          <stringProp name="AMQPSampler.Exchange">zyjmeterExchange</stringProp>

          <boolProp name="AMQPSampler.ExchangeDurable">true</boolProp>

          <boolProp name="AMQPSampler.ExchangeAutoDelete">true</boolProp>

          <boolProp name="AMQPSampler.ExchangeRedeclare">false</boolProp>

          <stringProp name="AMQPSampler.Queue">zytest-1</stringProp>

          <stringProp name="AMQPSampler.RoutingKey">zytest-1</stringProp>

          <stringProp name="AMQPSampler.VirtualHost">/</stringProp>

          <stringProp name="AMQPSampler.MessageTTL"></stringProp>

          <stringProp name="AMQPSampler.MessageExpires"></stringProp>

          <stringProp name="AMQPSampler.ExchangeType">direct</stringProp>

          <stringProp name="AMQPSampler.QueueDurable">true</stringProp>

          <stringProp name="AMQPSampler.QueueExclusive">false</stringProp>

          <stringProp name="AMQPSampler.QueueAutoDelete">false</stringProp>

          <boolProp name="AMQPSampler.Redeclare">false</boolProp>

          <stringProp name="AMQPSampler.Timeout">1000</stringProp>

          <stringProp name="AMQPSampler.Iterations">100</stringProp>

          <stringProp name="AMQPSampler.Host">${hostname}</stringProp>

          <stringProp name="AMQPSampler.Port">${port}</stringProp>

          <stringProp name="AMQPSampler.Username">${username}</stringProp>

          <stringProp name="AMQPSampler.Password">${password}</stringProp>

          <stringProp name="AMQPSampler.SSL">false</stringProp>

          <boolProp name="AMQPConsumer.ReadResponse">true</boolProp>

          <stringProp name="AMQPConsumer.PrefetchCount">0</stringProp>

          <stringProp name="AMQPConsumer.ReceiveTimeout"></stringProp>

          <stringProp name="AMQPConsumer.PurgeQueue">false</stringProp>

          <stringProp name="AMQPConsumer.AutoAck">true</stringProp>

          <boolProp name="AMQPConsumer.UseTx">false</boolProp>

        </com.zeroclue.jmeter.protocol.amqp.AMQPConsumer>

        <hashTree/>

        <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="察看结果树" enabled="true">

          <boolProp name="ResultCollector.error_logging">false</boolProp>

          <objProp>

            <name>saveConfig</name>

            <value class="SampleSaveConfiguration">

              <time>true</time>

              <latency>true</latency>

              <timestamp>true</timestamp>

              <success>true</success>

              <label>true</label>

              <code>true</code>

              <message>true</message>

              <threadName>true</threadName>

              <dataType>true</dataType>

              <encoding>false</encoding>

              <assertions>true</assertions>

              <subresults>true</subresults>

              <responseData>false</responseData>

              <samplerData>false</samplerData>

              <xml>false</xml>

              <fieldNames>true</fieldNames>

              <responseHeaders>false</responseHeaders>

              <requestHeaders>false</requestHeaders>

              <responseDataOnError>false</responseDataOnError>

              <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>

              <assertionsResultsToSave>0</assertionsResultsToSave>

              <bytes>true</bytes>

              <sentBytes>true</sentBytes>

              <url>true</url>

              <threadCounts>true</threadCounts>

              <idleTime>true</idleTime>

              <connectTime>true</connectTime>

            </value>

          </objProp>

          <stringProp name="filename"></stringProp>

        </ResultCollector>

        <hashTree/>

        <ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="聚合报告" enabled="true">

          <boolProp name="ResultCollector.error_logging">false</boolProp>

          <objProp>

            <name>saveConfig</name>

            <value class="SampleSaveConfiguration">

              <time>true</time>

              <latency>true</latency>

              <timestamp>true</timestamp>

              <success>true</success>

              <label>true</label>

              <code>true</code>

              <message>true</message>

              <threadName>true</threadName>

              <dataType>true</dataType>

              <encoding>false</encoding>

              <assertions>true</assertions>

              <subresults>true</subresults>

              <responseData>false</responseData>

              <samplerData>false</samplerData>

              <xml>false</xml>

              <fieldNames>true</fieldNames>

              <responseHeaders>false</responseHeaders>

              <requestHeaders>false</requestHeaders>

              <responseDataOnError>false</responseDataOnError>

              <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>

              <assertionsResultsToSave>0</assertionsResultsToSave>

              <bytes>true</bytes>

              <sentBytes>true</sentBytes>

              <url>true</url>

              <threadCounts>true</threadCounts>

              <idleTime>true</idleTime>

              <connectTime>true</connectTime>

            </value>

          </objProp>

          <stringProp name="filename"></stringProp>

        </ResultCollector>

        <hashTree/>

      </hashTree>

    </hashTree>

  </hashTree>

</jmeterTestPlan>
  • 参数说明
  1. AMQP Publisher参数说明

jmeter压测rabbitmq,rabbitmq,jmeter

  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<channel.close>(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,rabbitmq,jmeter

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,rabbitmq,jmeter

  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<channel.close>(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,rabbitmq,jmeter

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含义一致。

  • 问题收集

文章来源地址https://www.toymoban.com/news/detail-649332.html

  • 备注

到了这里,关于Jmeter对RabbitMQ压力测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 压力测试:使用 JMeter 进行压力测试

    创建新目录 jmeter_demo 在该目录下打开命令行输入: shell 复制代码 go mod init jmeter_demo go mod tidy 随后创建各目录与文件如下: shell 复制代码 -- jmeter_demo -- main main 函数目录(启动http和grpc服务) -- main.go -- proto grpc server 的目录 -- chat.go -- chat.pb.gp -- chat.proto -- test_plan jmeter 测试计划 --

    2024年04月16日
    浏览(42)
  • jmeter做接口压力测试_jmeter接口性能测试

     jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在linu

    2024年02月07日
    浏览(74)
  • 什么是压力测试?如何进行Jmeter压力测试

    软件测试中:压力测试(Stress Test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。 常用的压力测试软件有:LoadRunner、Apache JMeter、NeoLoad、

    2024年02月11日
    浏览(62)
  • Jmeter接口测试+压力测试

    jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在linux/w

    2023年04月16日
    浏览(48)
  • Jmeter接口测试与压力测试

    🍅 视频学习: 文末有免费的配套视频可观看 🍅  关注公众号:互联网杂货铺,回复1  ,免费获取软件测试全套资料,资料在手,涨薪更快 Jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简

    2024年04月23日
    浏览(44)
  • 压力测试+接口测试(工具jmeter)

    jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因 为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在 linux

    2024年01月17日
    浏览(56)
  • Jmeter接口测试与压力测试详解

     jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因 为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在 lin

    2024年01月19日
    浏览(53)
  • jmeter接口测试、压力测试简单实现

    测试计划—线程组—配置元件—前置处理器—定时器—逻辑控制器—取样器—后置处理器—断言—监听器 组件的作用范围: 同级组件 同级组件下的子组件 父组件 1、基于webservice协议接口,通过xml传输数据 2、基于dubbo协议接口,通过json传输数据 3、基于http协议接口,通过

    2024年02月15日
    浏览(49)
  • 性能测试-压力测试-jmeter简单实战

    压力测试考察当前 软硬件环境 下系统 所能承受的最大负荷并帮助找出系统瓶颈所在 。压测都是为了系统在线上的 处理能力和稳定性维持在一个标准范围内 ,做到心中有数。 使用压力测试,我们有希望发现找到很多种其他测试方法很难发现的错误。 有两种错误类型是:内

    2024年02月10日
    浏览(48)
  • Jmeter如何做压力测试

    1.哪些业务需要做压力测试? 比较常用的业务场景或功能模块 单业务场景或多业务场景 项目要求做的业务场景 2.压力测试的并发数是多少? 有预期的数值?100 200 300一次性达到还是逐次增加?参照上次性能测试的结果 3.关注哪些参数? 响应时间 tps  越高越好 错误率 越低越

    2024年02月07日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包