#jobs #sqlx #background #postgresql #task-queue #built #coil

coil_proc_macro

该库不应直接使用,它通过coil重新导出。

3 个版本 (重大更改)

0.3.0 2021年6月15日
0.2.0 2020年9月3日
0.1.0 2020年8月18日

#44#task-queue

每月下载 29 次
coil 中使用

GPL-3.0 许可证

16KB
374

Coil

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

Coverage Crates.io Crates.io

Coil深受swirl的启发,并在代码库的许多地方借鉴了其代码。

支持同步和异步作业。同步作业将被生成到由rayon管理的线程池中。异步作业将被生成到执行器上。唯一的要求是执行器实现了futures Spawn trait。这样,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://opensource.org/licenses/MIT下使用

该程序按照GPLv3重新许可。源中提供了Swirl的原始MIT许可证副本。

依赖项

~1.5MB
~35K SLoC