Home

Awesome

<p align="center"> <picture> <img alt="RobustMQ Logo" src="docs/images/robustmq-logo.png" width="300"> </picture> </p> <h3 align="center"> Next generation cloud-native converged message queue. </h3>

🚀 Introduction

RobustMQ is a next-generation high-performance cloud-native converged message queue. The goal is to implement a message queue based on Rust that can be compatible with multiple mainstream message queue protocols and has complete Serverless architecture.

It has long wanted to support multi-protocol and have a full Serverless architecture. At the same time, we hope to keep the architecture simple while adapting to different deployment scenarios and deployment requirements. To achieve lower deployment, operation and maintenance, and use costs.

Official documentation:

Tips: We are still young, please give us some time to grow up. We expect RobustMQ to become the next Apache top-level project in the message queue space.

Planning

In the first phase, the basic framework of the cluster (such as metadata storage service, storage adaptation layer, bring your own storage layer, etc.) and the functions related to MQTT protocol will be developed. The goal is to complete the RobustMQ architecture and adapt it to the MQTT protocol, and achieve production availability on the MQTT protocol.

Welcome to our development plan.

We are still young and development plans can change quickly.

Release planing:

💡 Features

Architecture

RobustMQ is a typical distributed layered architecture with separate computing layer, storage layer, and scheduling layer. By the control layer (Placement Center), computing Layer (Multi-protocol computing layer), Storage Adapter layer (Storage Adapter Layer), independent remote storage layer (Standalone storage) engine) consists of four parts. Each layer has the ability to quickly scale up and down, so as to achieve a complete Serverless capability of the whole system.

image

RobustMQ MQTT

RobustMQ MQTT is RobustMQ's complete implementation of the MQTT protocol. The goal is to build a high-performance, full-featured message queuing MQTT product in Rust that can be deployed in clusters. The ultimate goal of this feature is to rival enterprise-grade MQTT products such as EMQX and HiveMQ.

Features

  1. Cluster deployment: A single cluster supports thousands of Broker nodes, supporting unaware smooth horizontal scaling capabilities.
  2. Full protocol support: All features of MQTT3.1, 3.1.1, 5.0 protocols are supported
  3. High performance: A single machine supports millions of connections and high concurrent message throughput.
  4. Multiple communication protocols: Support TCP, TCP SSL, WebSocket, WebSocket SSL, QUIC, HTTP and other access methods.
  5. Plug-in storage: Support offline messages, support a variety of message persistence storage engines.
  6. Fully functional: It supports essential features like testament messages and retained messages, along with all the functionalities of enterprise MQTT brokers such as HiveMQ and EMQX. For the full features, see the RobustMQ MQTT documentation

Get Started

To start the order, you need to start the Placement Center first, and then start the MQTT Broker.

Binary packages run

Download .tar.gz
$ wget https://github.com/robustmq/robustmq/releases/download/v0.1.0-beta/robustmq-apple-mac-arm64-0.1.0-beta.tar.gz
$ tar -xzvf robustmq-apple-mac-arm64-0.1.0-beta.tar.gz
$ cd robustmq-apple-mac-arm64-0.1.0-beta
Start the Placement Center and MQTT Server for a node
$ bin/robust-server placement-center start config/placement-center.toml
$ bin/robust-server mqtt-server start config/mqtt-server.toml
Start the Placement Center and MQTT Server for 3 nodes
# Start Placement Center
$ bin/robust-server placement-center start example/mqtt-cluster/placement-center/node-1.toml
$ bin/robust-server placement-center start example/mqtt-cluster/placement-center/node-2.toml
$ bin/robust-server placement-center start cexample/mqtt-cluster/placement-center/node-3.toml

# Start MQTT Broker
$ bin/robust-server mqtt-server start example/mqtt-cluster/mqtt-server/node-1.toml
$ bin/robust-server mqtt-server start example/mqtt-cluster/mqtt-server/node-2.toml
$ bin/robust-server mqtt-server start example/mqtt-cluster/mqtt-server/node-3.toml

Cargo runs

Quickly launch the sample cluster
$ git clone https://github.com/robustmq/robustmq.git
$ cd roubustmq

# start cluster
$ sh example/mqtt-cluster/start.sh

# stop cluster
$ sh example/mqtt-cluster/stop.sh
Start the Placement Center and MQTT Server for a node
$ cargo run --package cmd --bin placement-center -- --conf=config/placement-center.toml
$ cargo run --package cmd --bin mqtt-server -- --conf=config/mqtt-server.toml
Start the Placement Center and MQTT Server for 3 node
# Start Placement Center
$cargo run --package cmd --bin placement-center -- --conf=example/mqtt-cluster/placement-center/node-1.toml
$cargo run --package cmd --bin placement-center -- --conf=example/mqtt-cluster/placement-center/node-2.toml
$cargo run --package cmd --bin placement-center -- --conf=example/mqtt-cluster/placement-center/node-3.toml

# Start MQTT Broker
cargo run --package cmd --bin mqtt-server -- --conf=example/mqtt-cluster/mqtt-server/node-1.toml
cargo run --package cmd --bin mqtt-server -- --conf=example/mqtt-cluster/mqtt-server/node-2.toml
cargo run --package cmd --bin mqtt-server -- --conf=example/mqtt-cluster/mqtt-server/node-3.toml

Test Cases

You need to install the cargo-nextes command first. Please refer to documentation《Testing》

Packaging

Follow the "make help" prompts to build packages for different platforms

FWR3KG21WF:robustmq bytedance$ make help

Usage:
  make <target>

Build Mac Release
  build-mac-release               Build mac version robustmq.

Build Linux Release
  build-linux-release             Build linux version robustmq.

Build Win Release
  build-win-release               Build win version robustmq.

Build Arm Release
  build-arm-release               Build arm version robustmq.
  test                            Integration testing for Robustmq
  clean                           Clean the project.
  help                            Display help messages.

MQTT functional tests

MQTT functionality was tested through the MQTTX tool. MQTTX quick start: https://mqttx.app/zh/docs/get-started.

RobustMQ AMQP

In the planning

RobustMQ Kafka

In the planning

RobustMQ RocketMQ

In the planning

RobustMQ ...

In the planning

Contributing

Contribution Guidelines

Please refer to contribution guidelines for more information.

Contact us

<div align="center"> <img src="docs/images/WechatGroup.png" alt="WeChat QR Code" width=200 /> </div> <div align="center"> <img src="docs/images/wechat.jpg" alt="WeChat QR Code" width=200 /> </div>

License

RobustMQ uses the Apache 2.0 license to strike a balance between open contributions and allowing you to use the software however you want