5 个不稳定版本

0.4.0 2021年6月15日
0.2.2 2021年2月8日
0.2.1 2021年2月8日
0.2.0 2020年9月3日
0.1.0 2020年8月18日

#1027 in 数据库接口

GPL-3.0 许可证

42KB
841

Coil

使用 SQLx、Postgres 和 Rayon 构建的异步任务队列

Coverage Crates.io Crates.io

Coil 受 swirl 极大启发,并大量借鉴了 swirl 的代码。在代码库的许多地方,代码非常相似。

支持同步和异步任务。同步任务将生成由 rayon 管理的线程池。异步任务将在执行器上生成。唯一的要求是执行器实现 futures Spawn 特性。这样,coil 支持 Tokiosmolasync-std

† 此软件处于 alpha 阶段,不打算用于生产环境。使用风险自负。

†† 此软件根据 GPLv3 许可证二次许可。swirl 的部分代码根据 MIT 许可证授权。请参阅 许可证 部分


示例

struct Size {
	width: u32,
	height: u32
}

#[coil::background_task]
async fn resize_image(id: u32, size: Size) -> Result<(), Error> {
	// some work
}

在一个环境中

struct Size {
	width: u32,
	height: u32
}

struct Environment {
    file_server_private_key: String,
    http_client: http_lib::Client,
    conn: sqlx::PgPool
}

#[coil::background_task]
async fn resize_image(env: &Environment, id: u32, size: Size) -> Result<(), Error> {
	// some work
}
resize_image_with_env("tohru".to_string(), Size { height: 32, width: 32 }).enqueue(&pool).await;
let runner = coil::RunnerBuilder::new(env, Executor, pool)
    .num_threads(8)
    .build()
    .unwrap();
runner.run_all_pending_tasks().await.unwrap()

swirl 的区别

  • 支持异步任务/执行器
  • 支持具有泛型参数的任务
  • 使用 Messagepack 而不是 JSON 将数据序列化到 Postgres
  • 在异步任务中,数据库查询将使用 SQLx 异步执行
  • 迁移包含在二进制文件中,并通过 migrate fn 公开。
  • 入队是一个 async fn

许可证

此程序包含来自 swirl 库的代码,在 MIT 许可证下使用,许可证地址:https://github.com/sgrif/swirl/blob/master/LICENSE-MIT

此程序根据 GPLv3 许可证二次许可。源代码中提供了 swirl 的原始 MIT 许可证副本。


lib.rs:

coil 是一个高效的 Postgres 后台任务队列。API 与 swirl 非常相似,实际上是基于 swirl 开发的。然而,除了 swirl 提供的功能外,coil 还可以

  • 将异步任务队列到执行器,无论是 smoltokio 还是 async-std
  • 使用泛型队列函数
  • coil 中,SQL查询尽可能异步执行
  • 迁移存储在二进制中,可通过 migrate() 函数访问。不再需要复制粘贴迁移文件!

依赖项

~22MB
~510K SLoC