3个版本

0.1.2 2023年10月3日
0.1.1 2023年10月3日
0.1.0 2023年10月3日

1100数据库接口

MIT 许可证

18KB
244

Unisub

Crates.io Docs.rs

Unisub是一个基于Rust的Pub/Sub库,使用Postgres作为后端。它提供了一个方便的方式来发布和订阅不同主题的消息。

功能

  • 发布消息到主题
  • 订阅主题以接收消息
  • 创建和删除主题
  • 包括一个方便的二进制文件用于管理主题和运行迁移
  • 使用Tokio的异步设计

安装

在您的 Cargo.toml 中添加Unisub作为依赖项

[dependencies]
unisub = "*"

设置Postgres环境

  1. 如果您尚未安装Postgres,可以从中下载:[链接](https://postgresql.ac.cn/download/)
  2. 创建一个新的数据库并记下连接URL。
  3. 确保您的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