Awesome
RabbitMQ Performance Testing Tool
This repository contains source code of the RabbitMQ Performance Testing Tool. The client is maintained by the RabbitMQ team at Broadcom.
PerfTest uses the AMQP 0.9.1 protocol to communicate with a RabbitMQ cluster. Use Stream PerfTest if you want to test RabbitMQ Streams with the stream protocol.
Installation
This is a standalone tool that is distributed in binary form using GitHub releases and as a JAR file on Maven Central (see below). PerfTest requires at least Java 8, but some features require Java 11. The latest LTS Java version is recommended.
A Docker image is available as well.
The latest snapshot is also available.
Documentation
<!-- * [Latest milestone release](https://rabbitmq.github.io/rabbitmq-perf-test/milestone/htmlsingle/) -->Usage
Running Performance Tests
Download the latest snapshot:
wget https://github.com/rabbitmq/rabbitmq-java-tools-binaries-dev/releases/download/v-rabbitmq-perf-test-latest/perf-test-latest.jar
Launch a performance test with 1 producer and 1 consumer:
java -jar perf-test-latest.jar
Use
java -jar perf-test-latest.jar --help
to see all supported options.
Producing HTML Output of Runs
The HTML Performance Tools are a set of tools that can help you run
automated benchmarks by wrapping around the PerfTest
benchmarking
framework. You can provide benchmark specs, and the tool will take care
of running the benchmark, collecting results and displaying them in an
HTML page. Learn more here.
Contributing
See CONTRIBUTING.md for an overview of the development process.
Building from Source
To build the uber JAR:
./mvnw clean package -P uber-jar -Dgpg.skip=true -Dmaven.test.skip
The generated file is target/perf-test.jar
.
To build the JAR file:
./mvnw clean package -Dmaven.test.skip
The file is then in the target
directory.
Running tests
The test suite needs to execute rabbitmqctl
to test connection recovery. You
can specify the path to rabbitmqctl
like the following:
./mvnw clean verify -Drabbitmqctl.bin=/path/to/rabbitmqctl
You need a local running RabbitMQ instance.
Running tests with Docker
Start a RabbitMQ container:
docker run -it --rm --name rabbitmq -p 5672:5672 rabbitmq:4.0
Run the test suite:
./mvnw clean verify -Drabbitmqctl.bin=DOCKER:rabbitmq
Files are then in the target
directory.
Maven Artifact
Logging
PerfTest
depends transitively on SLF4J for logging (through RabbitMQ Java Client). PerfTest
binary distribution
ships with Logback as a SLF4J binding and uses Logback default configuration (printing logs to the console). If
for any reason you need to use a specific Logback configuration file, you can do it this way:
java -Dlogback.configurationFile=/path/to/logback.xml -jar perf-test.jar
As of PerfTest 2.11.0, it is possible to define loggers directly from the command line. This is less powerful
than using a configuration file, yet simpler to use and useful for quick debugging. Use the rabbitmq.perftest.loggers
system property with name=level
pairs, e.g.:
java -Drabbitmq.perftest.loggers=com.rabbitmq.perf=debug -jar perf-test.jar
It is possible to define several loggers by separating them with commas, e.g.
-Drabbitmq.perftest.loggers=com.rabbitmq.perf=debug,com.rabbitmq.perf.Producer=info
.
It is also possible to use an environment variable:
export RABBITMQ_PERF_TEST_LOGGERS=com.rabbitmq.perf=info
The system property takes precedence over the environment variable.
Use the environment variable with the Docker image:
docker run -it --rm --network perf-test \
--env RABBITMQ_PERF_TEST_LOGGERS=com.rabbitmq.perf=debug,com.rabbitmq.perf.Producer=debug \
pivotalrabbitmq/perf-test:latest --uri amqp://rabbitmq
If you use PerfTest
as a standalone JAR in your project, please note it doesn't depend on any SLF4J binding,
you can use your favorite one.
Versioning
This tool uses semantic versioning.
Support
See the RabbitMQ Java libraries support page for the support timeline of this library.
License
This package, the RabbitMQ Performance Testing Tool library, is triple-licensed under the Mozilla Public License 2.0 ("MPL"), the GNU General Public License version 2 ("GPL") and the Apache License version 2 ("ASL").