memphis-rust-community

Crates.iomemphis-rust-community
lib.rsmemphis-rust-community
version0.4.0
sourcesrc
created_at2023-06-26 23:27:52.988752
updated_at2023-10-12 11:01:12.659397
descriptionA Rust implementation of the Memphis Messaging Protocol
homepagehttps://github.com/turulix/memphis-rust-community
repositoryhttps://github.com/turulix/memphis-rust-community
max_upload_size
id900807
size96,260
Conner (ZargorNET)

documentation

https://docs.rs/memphis-rust-community

README

Build Status docs.rs Crates.io Crates.io Crates.io

Memphis Rust Client

This is an unofficial client for Memphis, written in Rust.

Installation

Add the following to your Cargo.toml file:

[dependencies]
memphis-rust-community = "0.4.0"

Usage

Consumer

use memphis_rust_community::memphis_client::MemphisClient;
use memphis_rust_community::consumer::MemphisConsumerOptions;
use memphis_rust_community::station::MemphisStationsOptions;

#[tokio::main]
async fn main() {
    let client = MemphisClient::new("localhost:6666", "root", "memphis", None).await.unwrap();

    let station_options = MemphisStationsOptions::new("my-station");
    let station = client.create_station(station_options).await.unwrap();

    let consumer_options = MemphisConsumerOptions::new("my-consumer")
        .with_generate_unique_suffix(true);
    let consumer = station.create_consumer(consumer_options).await.unwrap();

    let mut message_receiver = consumer.consume().await.unwrap();
    tokio::spawn(async move {
        loop {
            let msg = message_receiver.recv().await;
            // Do something with the message
            break;
        }
    });
}

Producer

use memphis_rust_community::memphis_client::MemphisClient;
use memphis_rust_community::producer::MemphisProducerOptions;
use memphis_rust_community::station::MemphisStationsOptions;

#[tokio::main]
async fn main() {
    let client = MemphisClient::new("localhost:6666", "root", "memphis", None).await.unwrap();

    let station_options = MemphisStationsOptions::new("my-station");
    let station = client.create_station(station_options).await.unwrap();

    let producer_options = MemphisProducerOptions::new("my-producer")
        .with_generate_unique_suffix(true);

    let mut producer = station.create_producer(producer_options).await.unwrap();

    let msg = ComposableMessage::new()
        .with_payload("Hello World!")
        .with_header("TestHeader", "TestValue");

    producer.produce(msg).await.unwrap();
}

Supported Features

  • ✅ Connection
  • ✅ Disconnection
  • ✅ Create a station
  • ✅ Destroy a station
  • ✅ Retention
  • ✅ Retention values
  • ✅ Storage types

  • ⚠️ Schemaverse (WIP. Disabled by default via feature flag)
  • ❌ Create a new schema
  • ❌ Enforce a schema Protobuf
  • ✅ Enforce a schema Json
  • ❌ Enforce a schema GraphQL
  • ❌ Detach a schema

  • ✅ Produce
  • ✅ Add headers
  • ✅ Async produce
  • ✅ Message ID
  • ✅ Destroy a producer
  • ✅ Consume
  • ✅ Ack a message
  • ❌ Fetch
  • ✅ Message delay
  • ✅ Get Headers
  • ✅ Get message sequence number
  • ✅ Destroying a Consumer
  • ✅ Check if broker is connected
  • ✅ Consumer prefetch
Commit count: 115

cargo fmt