#工作处理 #后台任务 #后台作业 #任务队列 #作业 #任务 #后台处理

job_queue

一个简单高效的Rust库,用于处理异步作业处理和任务队列

20个版本

0.0.20 2023年12月29日
0.0.19 2023年12月7日
0.0.15 2023年11月25日

#844 in 解析器实现


3个crate中使用(通过adrift_core

MIT/Apache

31KB
789 代码行

job_queue

设置

cargo add job_queue

使用

创建一个作业

use job_queue::{Error, Job, typetag, async_trait, serde};

#[derive(Debug, serde::Deserialize, serde::Serialize)]
#[serde(crate = "job_queue::serde")]
pub struct HelloJob {
    pub message: String,
}

#[async_trait::async_trait]
#[typetag::serde]
impl Job for HelloJob {
    async fn handle(&self) -> Result<(), Error> {
        println!("{}", self.message);
        Ok(())
    }
}

创建一个队列并调度作业


use job_queue::{Error, Job, Queue};

let queue = Client::builder()
    .connect("mysql://root:@localhost/job_queue") // or postgres://root:@localhost/job_queue
    .await?;

queue
    .dispatch(&HelloJob {
        message: "Hello, world!".to_string(),
    })
    .await?;

创建一个工作者

use job_queue::{Error, Job, Worker};
use std::time::Duration;

let worker = Worker::builder()
        .max_connections(10)
        .worker_count(10)
        .connect("mysql://root:@localhost/job_queue") // or postgres://root:@localhost/job_queue
        .await?;

worker.start().await?; // blocks forever, or until all workers are stopped (crash or ctrl-c)

待办事项

  • 发出事件,失败,停止,在处理作业前后

依赖项

~13–25MB
~391K SLoC