1 个不稳定版本
0.0.1 | 2022年11月11日 |
---|
#20 in #发布-订阅
17KB
72 行
tokio-messaging
一个提供使用Tokio通道的非阻塞发布/订阅功能的crate。
通过使用Messaging
实例来发布消息和订阅它们,该实例充当消息代理。
为了创建消息代理,首先定义消息的结构和它们的数据(有效载荷)。类型应该分别实现Message
和MessageData
。
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