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

tokio-messaging

使用Tokio通道实现的发布/订阅功能

1 个不稳定版本

0.0.1 2022年11月11日

#20 in #发布-订阅

GPL-3.0-or-later

17KB
72

tokio-messaging

一个提供使用Tokio通道的非阻塞发布/订阅功能的crate。

通过使用Messaging实例来发布消息和订阅它们,该实例充当消息代理。

为了创建消息代理,首先定义消息的结构和它们的数据(有效载荷)。类型应该分别实现MessageMessageData

enum MyMessage
{
	Greeting,
	Request
}
 
impl Message for MyMessage {}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
struct MyPayload(&'static str);
 
impl MessageData for MyPayload {}

接下来,创建消息代理实例。通常,你将有一个单个的长生命期实例。

lazy_static! {
	static ref INSTANCE: Messaging<MyMessage, MyPayload> = { Messaging::new() };
}

pub fn messaging() -> &'static Messaging<MyMessage, MyPayload> { &INSTANCE }

使用dispatch()函数发布消息,并使用on()函数订阅它们。

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

依赖关系

~2.4–4MB
~69K SLoC