#tokio #messaging #publish #subscribe #pub-sub #async

tokio-messaging

Publish/subscribe functionality using Tokio channels

1 unstable release

0.0.1 Nov 11, 2022

#20 in #publish-subscribe

GPL-3.0-or-later

17KB
72 lines

tokio-messaging

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!"));

Dependencies

~2.4–4MB
~69K SLoC