6 releases

new 0.1.3 May 5, 2024
0.1.2 Apr 10, 2024
0.1.1 Jan 3, 2024
0.1.0 Dec 25, 2023

#783 in Command line utilities

Download history 2/week @ 2024-02-25 24/week @ 2024-03-10 2/week @ 2024-03-17 107/week @ 2024-04-07 4/week @ 2024-04-14 115/week @ 2024-05-05

126 downloads per month

MIT license

51KB
1K SLoC

Simple-pub-sub

A simple message broker implemented in rust.

The message frame looks like

header version pkt type topic length message length padding topic message
1 byte 2 bytes 1 byte 1 byte 2 bytes 1 byte ..... .....

So it's a 8 byte header followed by the topic and message.

Cli Usage

  • Server:

    • Using Tcp socket:

      simple-pub-sub server tcp 0.0.0.0 6480 --log-level trace
      
    • Using Unix socket:

      simple-pub-sub server unix /tmp/pubsub.sock --log-level trace
      
  • Client:

    • Using Tcp socket:
      • subscribe:

        simple-pub-sub client tcp 0.0.0.0 6480 subscribe the_topic --log-level trace
        
      • publish:

        simple-pub-sub client tcp 0.0.0.0 6480 publish the_topic the_message --log-level info
        
      • query:

        simple-pub-sub client tcp 0.0.0.0 6480 query the_topic --log-level trace
        
    • Using Unix socket:
      • subscribe:

        simple-pub-sub client unix /tmp/pubsub.sock subscribe the_topic --log-level trace
        
      • publish:

        simple-pub-sub client unix /tmp/pubsub.sock publish the_topic the_message --log-level info
        
      • query:

        simple-pub-sub client unix /tmp/pubsub.sock query the_topic --log-level trace
        

API Usage

To subscribe

use simple-pub-sub

// define the on_message function (callback).
pub fn on_msg(topic: String, message: Vec<u8>) {
    println!("topic: {} message: {:?}", topic, message)
}
#[tokio::main]
async fn main() -> Result<(), String> {
    let client_type = simple_pub_sub::client::PubSubTcpClient {
        server: "localhost".to_string(),
        port: 6480,
    };
    // initialize the client.
    let mut client =
        simple_pub_sub::client::Client::new(simple_pub_sub::client::PubSubClient::Tcp(client_type));
    // set the callback function.
    client.on_message(on_msg);
    // connect the client.
    let _ = client.connect().await;
    // subscribe to the given topic.
    let _ = client.subscribe("abc".to_string()).await;
    Ok(())
}

To publish a message

use simple_pub_sub;
async fn main() -> Result<(), String> {
    let client_type = simple_pub_sub::client::PubSubTcpClient {
        server: "localhost".to_string(),
        port: 6480,
    };
    // initialize the client.
    let mut client =
        simple_pub_sub::client::Client::new(simple_pub_sub::client::PubSubClient::Tcp(client_type));
    // connect the client.
    let _ = client.connect().await;
    // subscribe to the given topic.
    let _ = client
        .publish(
            "abc".to_string(),
            "test message".to_string().into_bytes().to_vec(),
        )
        .await;
    Ok(())
}

Dependencies

~7–19MB
~237K SLoC