Crates.io | tokio-messaging |
lib.rs | tokio-messaging |
version | 0.0.1 |
source | src |
created_at | 2022-11-11 12:41:54.728616 |
updated_at | 2022-11-11 12:41:54.728616 |
description | Publish/subscribe functionality using Tokio channels |
homepage | https://github.com/etienne-k/tokio-messaging |
repository | https://github.com/etienne-k/tokio-messaging |
max_upload_size | |
id | 712828 |
size | 50,366 |
A crate which offers non-blocking publish/subscribe functionality using Tokio channels.
Publishing messages and subscribing to them is done using an Messaging
instance,
which acts as a message broker.
In order to create a message broker, start by defining the structure of messages and their data (payload).
The types should implement Message
and MessageData
respectively.
enum MyMessage
{
Greeting,
Request
}
impl Message for MyMessage {}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
struct MyPayload(&'static str);
impl MessageData for MyPayload {}
Next, create the message broker instance. Usually, you'll have a single, long-living instance.
lazy_static! {
static ref INSTANCE: Messaging<MyMessage, MyPayload> = { Messaging::new() };
}
pub fn messaging() -> &'static Messaging<MyMessage, MyPayload> { &INSTANCE }
Publish messages using the dispatch()
function and subscribe to them using the on()
function.
// Subscribe to messages
tokio::spawn(messaging().on(MyMessage::Request, |data: MyPayload| {
assert_eq!(data.0, "Here's a request!");
}));
// Publish a message
messaging().dispatch(MyMessage::Request, MyPayload("Here's a request!"));