Pubsub Crate
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 is designed to be thread-safe, async-friendly, memory-efficient, and supports clean shutdown.
Features
- Thread-safe: Uses
ArcandDashMapfor 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.
- Multiple subscribers per topic: Supports multiple subscribers for each topic.
- Multiple topics per subscriber: Subscribers can subscribe to multiple topics.
- Graceful shutdown handling: Ensures proper cleanup when the system is dropped.
Usage
Add the following to your Cargo.toml:
[]
= "0.1.0"
Basic Example
use ;
async
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
DashMapfor 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
Arcfor shared ownership. - Uses
Weakreferences to prevent memory leaks. - Proper cleanup on drop.
Examples
See the tests module for more comprehensive usage examples.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
Acknowledgements
async-channelfor providing the async channels used in this crate.DashMapfor providing the concurrent hash map used for topic storage.