1 个不稳定版本
0.1.0 | 2024年5月5日 |
---|
#1274 in 异步
38KB
166 代码行
App-Queue
App-Queue是一个简单的Rust应用内持久队列。它旨在嵌入到单体应用中,并为异步任务提供自动队列和重试功能。
此外,它允许使用任何可序列化的数据类型作为请求。
默认情况下,如果作业返回错误,它将使用指数退避(最长延迟600秒)无限期重试。但是,可以在每个作业类型的基础上覆盖此行为。
示例用法,来自文档
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MyJob {
message: String
}
#[typetag::serde]
#[async_trait::async_trait]
impl Job for MyJob {
async fn run(&mut self, _: Arc<AppQueue>) -> Result<()> {
println!("{}", self.message);
Ok(())
}
}
#[tokio::main]
async fn main() -> Result<()> {
# tracing_subscriber::fmt::init();
let queue = AppQueue::new("/tmp/queue.db").await?;
let job = MyJob {
message: "Hello, world!".into()
};
queue.add_job(Box::new(job)).await?;
queue.run_job_workers_default();
Ok(())
}
更详细的示例 可以在这里找到。
注意事项
不兼容的模式更改(Job结构体的重命名/删除)以及作业本身结构的不兼容更改会导致作业在队列中卡住。这将在启动时显示错误,但在程序的其余运行时间内将被忽略。
限制
当前尚未支持的可能需要的特性
- 在指定时间后运行作业(技术上可行,但尚无API)
- 优先级
- 与应用存储的集成。应用可能已经使用数据库,因此最好只有一个数据库。在某些情况下,适当的数据库管理系统也可能提高性能。
依赖项
~51MB
~885K SLoC