4 releases (2 breaking)

0.3.0 Feb 12, 2023
0.2.2 Nov 27, 2022
0.2.1 Jul 14, 2021
0.1.0 Feb 2, 2021

#349 in Network programming


7.5K SLoC


Crates.io Build Status

Build and run

metalmq is under development, it is not feature complete but you can try and run with cargo run.

cargo run --bin metalmq
## or to enable logs
RUST_LOG=debug cargo run --bin metalmq
RUST_LOG=metalmq=trace cargo run --bin metalmq
cargo test --tests

## or to run integration tests
cargo test --package metalmq --test it

There are some examples in the examples directory, they implement simple scenarios of the metalmq-client library. To run execute

RUST_LOG=metalmq_client=trace cargo run --example publish-consume

Running tests in metalmq-client

cargo test --package metalmq-client --test it

AMQP compliance

For AMQP compliance we use pika Python library and pytest framework to be to validate the comformance of metalmq server.

cd amqp-compliance

Compilance matrix

Method Field
exchange.declare ✅ exchange
❌ type
✅ passive
❌ durable (no persistence)
❓ arguments
queue.declare ✅ queue
✅ passive
❓ durable
✅ exclusive
✅ auto-delete

AMQP 0.9 client library

In metalmq-client there is a Rust async client which implements part of the AMQP 0.9.1 protocol. You can try agains metalmq server or rabbitmq.

#docker run -p 5672:5672 -p 15672:15672 --rm rabbitmq:3-management
cargo test --lib metalmq-client

In order to validate AMQP packages we also need a stable AMQP client implementation which is the pika. It runs on Python, so one need to install pipenv to run that.

cd amqp-compliance

Debug test

Switch on logging in the beginning of the test.

async fn test() -> Result<()> {

Start the test with the environment variable set.

RUST_LOG=metalmq_client=trace cargo test -- --exact exchange::declare_exchange_with_different_type --show-output

Unit test coverage

Run unit test with coverage.

rustup component add llvm-tools-preview
cargo install grconv

mkdir -p target/coverage/data
make metalmq-cover
open target/coverage/html/index.html

Use tokio console

In the examples the publish-consume test has dependency on the tokio console.

RUSTFLAGS="--cfg tokio_unstable" cargo run --example publish-consume


~310K SLoC