3个版本
0.1.2 | 2023年10月3日 |
---|---|
0.1.1 | 2023年10月3日 |
0.1.0 | 2023年10月3日 |
1100 在 数据库接口 中
18KB
244 行
Unisub
Unisub是一个基于Rust的Pub/Sub库,使用Postgres作为后端。它提供了一个方便的方式来发布和订阅不同主题的消息。
功能
- 发布消息到主题
- 订阅主题以接收消息
- 创建和删除主题
- 包括一个方便的二进制文件用于管理主题和运行迁移
- 使用Tokio的异步设计
安装
在您的 Cargo.toml
中添加Unisub作为依赖项
[dependencies]
unisub = "*"
设置Postgres环境
- 如果您尚未安装Postgres,可以从中下载:[链接](https://postgresql.ac.cn/download/)
- 创建一个新的数据库并记下连接URL。
- 确保您的Postgres数据库可访问且正在运行。
环境变量
设置一个名为 DATABASE_URL
的环境变量,其中包含Postgres连接URL。
export DATABASE_URL=postgres://username:password@localhost/dbname
运行迁移和设置主题
使用CLI
首先,运行迁移
unisub migrate
然后您可以添加您的主题
unisub add-topic my_topic
程序化
use unisub::PubSub;
use unisub::migrate;
use sqlx::PgPool;
#[tokio::main]
async fn main() -> Result<(), unisub::Error> {
let pool = PgPool::connect("your_database_url").await?;
migrate(&pool).await?;
let mut pubsub = PubSub::new(pool).await?;
pubsub.add_topic("my_topic").await?;
Ok(())
}
使用
库
use unisub::PubSub;
use sqlx::PgPool;
#[tokio::main]
async fn main() -> Result<(), unisub::Error> {
let pool = PgPool::connect("your_database_url").await?;
let mut pubsub = PubSub::new(pool).await?;
pubsub.push("my_topic", b"My message").await?;
Ok(())
}
以下是一个订阅主题的示例
use unisub::PubSub;
use sqlx::PgPool;
#[tokio::main]
async fn main() -> Result<(), unisub::Error> {
// Connect to the database
let pool = PgPool::connect("your_database_url").await?;
let mut pubsub = PubSub::new(pool).await?;
// Subscribe to the topic
pubsub.subscribe("my_topic", |message| {
async {
// Print the received message
println!("Received message: {:?}", message);
// Simulate some asynchronous work with the received message
tokio::time::sleep(tokio::time::Duration::from_secs(2)).await;
println!("Finished processing message: {:?}", message);
Ok(())
}
}).await?;
Ok(())
}
贡献
欢迎贡献!请提交一个拉取请求或创建一个问题以开始。
许可证
本项目受MIT许可证的许可。
依赖项
~15–28MB
~434K SLoC