Expand description
A publish-subscribe system for Rust with async/await support.
This crate provides a simple yet powerful publish-subscribe (pubsub) system that allows multiple subscribers to receive messages published to specific topics. It’s designed to be:
- Thread-safe: Uses Arc and DashMap for concurrent access
- Async-friendly: Built with async/await support using async-channel
- Memory efficient: Uses weak references to prevent memory leaks
- Clean shutdown: Automatically cleans up resources when dropped
§Features
- Multiple subscribers per topic
- Multiple topics per subscriber
- Thread-safe operations
- Async message delivery
- Automatic cleanup of dropped subscribers
- Graceful shutdown handling
§Basic Usage
use pubsub_rs::{Pubsub, PubsubError};
#[tokio::main]
async fn main() {
let pubsub = Pubsub::new();
// Subscribe to topics
let subscriber = pubsub.subscribe(vec!["topic1", "topic2"]).await;
// Publish messages
pubsub.publish("topic1", "Hello".to_owned()).await;
// Receive messages
let (topic, message) = subscriber.recv().await.unwrap();
assert_eq!(topic, "topic1");
assert_eq!(message, "Hello");
}
§Error Handling
The main error type is PubsubError
, which occurs when:
- The pubsub system has been closed
- A subscriber tries to receive messages after the pubsub system is dropped
§Performance Considerations
- Uses DashMap for concurrent topic storage
- Each subscriber has its own async channel
- Message delivery is non-blocking
- Automatic cleanup of dropped subscribers
§Safety
- All operations are thread-safe
- Uses Arc for shared ownership
- Uses Weak references to prevent memory leaks
- Proper cleanup on drop
§Examples
See the tests module for more comprehensive usage examples.
Structs§
- Pubsub
- A publish-subscribe system that allows multiple subscribers to receive messages published to specific topics.
- Pubsub
Error - Error type returned when a Pubsub operation fails.
- Subscriber
- A subscriber that receives messages for subscribed topics from a Pubsub system.
Traits§
- Pubsub
Topic - A trait that defines the requirements for types that can be used as Pubsub topics.