文档首页/ 分布式消息服务RabbitMQ版/ 用户指南/ 测试实例性能/ 测试RabbitMQ生产速率和消费速率
更新时间:2025-07-14 GMT+08:00

测试RabbitMQ生产速率和消费速率

本章节从实例规格、是否开启SSL、生产者/消费者数量、队列数量、队列类型、Exchange类型的维度进行分布式消息服务RabbitMQ版的性能测试,对比客户端消息生产速率和消费速率,得出性能测试结果。

  • 测试场景一(实例规格):相同Exchange、队列、生产者数量、消费者数量、不同的实例规格
  • 测试场景二(是否开启SSL):相同Exchange、队列、生产者数量、消费者数量、实例规格,开启SSL和未开启SSL的实例
  • 测试场景三(生产者/消费者数量):相同Exchange、队列、实例规格,不同数量的生产者和消费者
  • 测试场景四(单队列和多队列):相同Exchange、生产者数量、消费者数量、实例规格,不同的队列数量
  • 测试场景五(队列类型):相同Exchange、生产者数量、消费者数量、实例规格,不同的队列类型
  • 测试场景六(Fanout Exchange):相同实例规格、Fanout Exchange、队列数量,不同生产者数量、消费者数量

由于网络环境的影响和客户端的不同,测试结果可能会有差异。

测试环境

进行性能测试前,您需要先构建如下的测试环境:

  1. 购买如表1所示RabbitMQ 3.8.35版本的集群实例,购买方法请参考购买RabbitMQ实例
    • 设置连接RabbitMQ密码时,建议不要使用特殊字符。如果使用特殊字符,在使用测试脚本时,需要对特殊字符进行转义处理,否则会报错。
    • 购买“rabbitmq-2u4g”实例时,请开启公网访问,并在安全组中入方向规则中放通15672端口,以便在浏览器中访问WebUI界面。
    表1 实例参数

    名称

    代理数量

    规格

    是否开启SSL

    磁盘类型

    rabbitmq-ssl

    3

    rabbitmq.2u4g.cluster

    超高I/O

    rabbitmq-2u4g

    3

    rabbitmq.2u4g.cluster

    超高I/O

    rabbitmq-4u8g

    3

    rabbitmq.4u8g.cluster

    超高I/O

    rabbitmq-8u16g

    3

    rabbitmq.8u16g.cluster

    超高I/O

    rabbitmq-16u32g

    3

    rabbitmq.16u32g.cluster

    超高I/O

    购买完成后,在实例详情页获取RabbitMQ实例的内网连接地址,并记录购买实例时设置的用户名和密码。如果是“rabbitmq-2u4g”实例,除了内网连接地址、用户名和密码外,还需要记录Web界面UI地址,此地址在后续登录WebUI界面设置镜像队列和惰性队列时需要使用。

  2. 在“rabbitmq-2u4g”实例中,登录WebUI,并设置镜像队列惰性队列仲裁队列
  3. 在“rabbitmq-2u4g”实例的“/”Vhost下,创建“fanout”类型的Exchange,具体步骤请参考创建RabbitMQ Exchange
  4. 获取测试工具rabbitmq-perf-test-2.18.0-bin.tar.gz
  5. 购买客户端服务器。

    购买区域、可用区、虚拟私有云、子网、安全组与RabbitMQ实例保持一致,规格为16U32G,Linux系统的ECS服务器,具体步骤请参考购买弹性云服务器

    购买完成ECS后,需要在ECS中完成以下配置:

    • 安装Java JDK,并配置JAVA_HOME与PATH环境变量。
      export JAVA_HOME=/root/jdk1.8.0_231 
      export PATH=$JAVA_HOME/bin:$PATH
    • 下载rabbitmq-perf-test-2.18.0-bin.tar.gz,并解压。
      tar -zxvf rabbitmq-perf-test-2.18.0-bin.tar.gz

测试脚本

  • 测试脚本自动创建的Exchange类型为“direct”,队列特性为非持久化、自动删除,在测试fanout类型Exchange和仲裁队列时,需要在脚本后增加“--predeclared”,表示使用自己定义的Exchange和队列参数。
  • 测试开启SSL的实例时,需要将“amqp://”修改为“amqps://”,表示以加密形式传输数据。

单队列测试脚本:

./runjava com.rabbitmq.perf.PerfTest -h amqp://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -u {队列名称} -x {生产者个数} -y {消费者个数} -z {运行时间}
表2 测试脚本参数说明

参数名称

说明

实例用户名

购买实例时设置的用户名。

实例密码

购买实例时设置的密码。

内网连接地址

购买实例后获取的内网连接地址。

Exchange名称

待测试的Exchange名称。

队列名称

待测试的队列名称。

生产者个数

生产者的数量。

消费者个数

消费者的数量。

运行时间

脚本的运行时间,单位为秒。

多队列测试脚本:

./runjava com.rabbitmq.perf.PerfTest -h amqp://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -x {生产者个数} -y {消费者个数} -z {运行时间} --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x
表3 测试脚本参数说明

参数名称

说明

实例用户名

购买实例时设置的用户名。

实例密码

购买实例时设置的密码。

内网连接地址

购买实例后获取的内网连接地址。

Exchange名称

待测试的Exchange名称。

生产者个数

生产者的数量。

消费者个数

消费者的数量。

运行时间

脚本的运行时间,单位为秒。

queue-%d

表示多个队列,队列名称前缀为queue-,%d表示变量,取值为从--queue-pattern-from数值到--queue-pattern-to数值的连续整数。

例如:--queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3,表示3个队列,队列名称为queue-1、queue-2、queue-3。

测试步骤

  1. 登录客户端服务器,进入“rabbitmq-perf-test-2.18.0/bin”目录下。
  2. 运行以下脚本,测试并记录不同实例规格下的生产速率和消费速率。

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -u {队列名称} -x 3 -y 3 -z 300

    示例如下:

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 3 -y 3 -z 300

  3. 运行以下脚本,测试并记录rabbitmq-ssl实例在不同生产者数量、消费者数量、队列数量的生产速率和消费速率。

    单队列测试脚本:
    ./runjava com.rabbitmq.perf.PerfTest -h amqps://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -u {队列名称} -x {生产者个数} -y {消费者个数} -z 300

    示例如下:

    ./runjava com.rabbitmq.perf.PerfTest -h amqps://test:******@192.168.0.150:5671 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300

    多队列测试脚本:

    ./runjava com.rabbitmq.perf.PerfTest -h amqps://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x

    示例如下:

    ./runjava com.rabbitmq.perf.PerfTest -h amqps://test:******@192.168.0.150:5671 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3

  4. 运行以下脚本,测试并记录rabbitmq-2u4g实例在不同生产者数量、消费者数量、队列数量的生产速率和消费速率。

    单队列测试脚本:
    ./runjava com.rabbitmq.perf.PerfTest -h amqp://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -u {队列名称} -x {生产者个数} -y {消费者个数} -z 300

    示例如下:

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300

    多队列测试脚本:

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -x {生产者个数} -y {消费者个数} -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x

    示例如下:

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3

  5. 运行以下脚本,测试并记录rabbitmq-2u4g实例在不同生产者数量、消费者数量、队列数量、队列类型的生产速率和消费速率,其中队列类型分别为“惰性”、“镜像”和“仲裁”。

    单队列测试脚本(不包括仲裁队列):
    ./runjava com.rabbitmq.perf.PerfTest -h amqp://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -u {队列名称} -x {生产者个数} -y {消费者个数} -z 300

    示例如下:

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300

    多队列测试脚本(不包括仲裁队列):

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -x {生产者个数} -y {消费者个数} -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x

    示例如下:

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3
    单队列测试脚本(仲裁队列):
    ./runjava com.rabbitmq.perf.PerfTest -h amqp://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -u {队列名称} -x {生产者个数} -y {消费者个数} -z 300 --predeclared

    示例如下:

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300 --predeclared

    多队列测试脚本(仲裁队列):

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -x {生产者个数} -y {消费者个数} -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x --predeclared

    示例如下:

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3 --predeclared

  6. 运行以下脚本,测试并记录rabbitmq-2u4g实例的Fanout Exchange在不同消费者数量、队列数量的生产速率和消费速率。

    单队列测试脚本:

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://{实例用户名}:{实例密码}@{内网连接地址} -e {Exchange名称} -s 1024 -u {队列名称} -x {生产者个数} -y {消费者个数} -z 300 --predeclared

    示例如下:

    ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-fanout -s 1024 -u queue-1 -x 1 -y 3 -z 300 --predeclared

测试结果

以下介绍六个测试场景对应的测试结果。