Rust-native IPC broker

Overview

elbus - Rust-native IPC broker

Note: the project is under development and in alpha stage

https://elbus.bma.ai/

What is elbus

elbus is a rust-native IPC broker, written in Rust/Tokio, inspired by zeromq and nanomsg. elbus is fast, flexible and very easy to use.

The library can be embedded in any Rust project or be used as a standalone server.

Documentation

Available at https://elbus.readthedocs.io/

Inter-process communication

The following communication patterns are supported out-of-the-box:

  • one-to-one messages
  • one-to-many messages
  • pub/sub

The following channels are supported:

  • async channels between threads/futures (Rust only)
  • UNIX sockets (local machine)
  • TCP sockets

In addition to Rust, elbus has also bindings for the following languages:

Rust crate: https://crates.io/crates/elbus

Client registration

A client should register with a name "group.subgroup.client" (subgroups are optional). The client's name can not start with dot (".", reserved for internal broker clients) if registered via IPC.

The client's name must be unique, otherwise the broker refuses the registration.

Broadcasts

Broadcast messages are sent to multiple clients at once. Use "?" for any part of the path, "*" as the ending for wildcards. E.g.:

"?.test.*" - the message is be sent to clients "g1.test.client1", "g1.test.subgroup.client2" etc.

Topics

Use MQTT-format for topics: "+" for any part of the path, "#" as the ending for wildcards. E.g. a client, subscribed to "+/topic/#" receives publications sent to "x/topic/event", "x/topic/sub/event" etc.

RPC layer

An optional included RPC layer for one-to-one messaging can be used. The layer is similar to JSON RPC but is optimized for byte communications.

Security and reliability model

elbus has ZERO security model in favor of simplicity and speed. Also, elbus is not designed to work via unstable connections, all clients should be connected either from the local machine or using high-speed reliable local network communications.

If you need a pub/sub server for a wide area network, try PSRT.

Examples

See examples folder.

Build a stand-alone server

cargo build --features server,broker-api

The "broker-api" feature is optional. When enabled, it allows to call broker default internal functions.

About the authors

Bohemia Automation / Altertech is a group of companies with 15+ years of experience in the enterprise automation and industrial IoT. Our setups include power plants, factories and urban infrastructure. Largest of them have 1M+ sensors and controlled devices and the bar raises upper and upper every day.

You might also like...
Rust crate for configurable parallel web crawling, designed to crawl for content

url-crawler A configurable parallel web crawler, designed to crawl a website for content. Changelog Docs.rs Example extern crate url_crawler; use std:

Rust crate for scraping URLs from HTML pages

url-scraper Rust crate for scraping URLs from HTML pages. Example extern crate url_scraper; use url_scraper::UrlScraper; fn main() { let director

FTP client for Rust

rust-ftp FTP client for Rust Documentation rust-ftp Installation Usage License Contribution Development environment Installation FTPS support is achie

The gRPC library for Rust built on C Core library and futures

gRPC-rs gRPC-rs is a Rust wrapper of gRPC Core. gRPC is a high performance, open source universal RPC framework that puts mobile and HTTP/2 first. Sta

A library to work with CIDRs in rust

ipnetwork This is a library to work with IPv4 and IPv6 CIDRs in Rust Run Clippy by doing rustup component add clippy cargo clippy Installation This c

Network simulation in Rust

netsim - A Rust library for network simulation and testing (currently linux-only). netsim is a crate for simulating networks for the sake of testing n

Cross-platform, low level networking using the Rust programming language.

libpnet Linux ∪ OS X Build Status: Windows Build Status: Discussion and support: #libpnet on freenode / #rust-networking on irc.mozilla.org / #rust on

A runtime for writing reliable asynchronous applications with Rust. Provides I/O, networking, scheduling, timers, ...

Tokio A runtime for writing reliable, asynchronous, and slim applications with the Rust programming language. It is: Fast: Tokio's zero-cost abstracti

Easy protocol definitions in Rust

protocol Documentation Easy protocol definitions in Rust. This crate adds a custom derive that can be added to types, allowing structured data to be s

Comments
  • js: fix topic and payload offsets for publish frames

    js: fix topic and payload offsets for publish frames

    There were a few things wrong here:

    • The search for the topic's null terminator was starting from the beginning of the payload, rather than after the sender's null terminator
    • The topic slice was also starting from the beginning of the payload
    • The i cursor was getting an extra +1, presumably to skip the null bytes for both the sender and the topic, even though the sender's byte was already being skipped a couple of lines down

    Now, the sender null byte is skipped earlier for clarity and the search/slice for the topic starts in the right place.

    opened by jrobsonchase 2
Releases(v0.3.5)
Owner
Altertech
Altertech
Export statistics of Mosquitto MQTT broker (topic: $SYS) to Prometheus

Preface The Mosquitto MQTT broker provides a number of statistics on the special $SYS/# topic (see mosquitto(8)). Build requirements As a Rust program

Bobobo-bo Bo-bobo 2 Dec 15, 2022
A super minimal wrapper around unix sockets for IPC on top of tokio.

tokio-unix-ipc This crate implements a minimal abstraction over UNIX domain sockets for the purpose of IPC on top of tokio.

Armin Ronacher 26 Nov 18, 2022
Modular IPC-based desktop launcher service

Pop Launcher Modular IPC-based desktop launcher service, written in Rust. Desktop launchers may interface with this service via spawning the pop-launc

Pop!_OS 125 Dec 23, 2022
An experimental IPC interface definition language for Hubris.

Idol: interface definitions for Hubris This is an experimental interface definition language for defining IPC interfaces between tasks in a Hubris app

Oxide Computer Company 8 Oct 19, 2022
Rust client for NATS, the cloud native messaging system.

A Rust client for the NATS messaging system. Status Motivation Rust may be the most interesting new language the NATS ecosystem has seen. We believe t

NATS - The Cloud Native Messaging System 651 Jan 3, 2023
A library-first, lightweight, high-performance, cloud-native supported API gateway🪐 by RUST

Preview version, will not guarantee the stability of the API! Do NOT use in production environment! A library-first, lightweight, high-performance, cl

Ideal World 4 May 7, 2023
Cloud Native high performance security and privacy SQL proxy.

Fern proxy With the advent of Cloud Native applications, architecture patterns evolved and emerged to take advantage of cloud computing, and build mor

Fern 12 Nov 7, 2022
Grow Rust is a Growtopia Private Server made in Rust

Grow Rust is a Growtopia Private Server made in Rust

null 14 Dec 7, 2022
Multiplex server for rust-analyzer, allows multiple LSP clients (editor windows) to share a single rust-analyzer instance per cargo workspace

ra-multiplex   Multiplex server for rust-analyzer, allows multiple LSP clients (editor windows) to share a single rust-analyzer instance per cargo wor

max 95 Dec 29, 2022
DNS Server written in Rust for fun, see https://dev.to/xfbs/writing-a-dns-server-in-rust-1gpn

DNS Fun Ever wondered how you can write a DNS server in Rust? No? Well, too bad, I'm telling you anyways. But don't worry, this is going to be a fun o

Patrick Elsen 26 Jan 13, 2023