9个不稳定版本 (3个重大更改)
0.4.0 | 2023年4月7日 |
---|---|
0.3.2 | 2023年4月7日 |
0.2.3 | 2023年4月6日 |
0.1.0 | 2023年4月6日 |
#1965 在 数据库接口
每月56次下载
17KB
418 行
简单作业队列
进行中
一个简单(可能非常低效)的异步分布式作业队列,具有可配置的后端。为我的个人用途构建,请自行承担风险。目前仅支持 Tokio。
功能 | Redis |
---|---|
作业提交 | ✅ |
作业处理 | ✅ |
分布式工作者 | ✅ |
容错性 | ✅ |
延迟执行 | ✅ |
重试 | 🟡 |
安装
cargo add simple-job-queue
使用
use std::time::{Duration, SystemTime, UNIX_EPOCH};
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use simple_job_queue::{
redis::{RedisJobQueueBackend, RedisJobQueueBackendOptions},
Job, JobError, JobQueue, JobQueueOptions, Processor,
};
#[derive(Serialize, Deserialize)]
pub struct Data {
field: i32,
}
pub struct DataProcessor;
#[async_trait]
impl Processor<Data> for DataProcessor {
async fn process(&mut self, job: &Job<Data>) -> Result<(), JobError> {
println!("{}", job.data.field);
Ok(())
}
}
#[tokio::main]
async fn main() {
let backend = RedisJobQueueBackend::new(
"redis://:[email protected]",
"queue_name".to_string(),
RedisJobQueueBackendOptions::default(),
)
.unwrap();
let mut queue: JobQueue<Data, RedisJobQueueBackend> =
JobQueue::new(backend, JobQueueOptions::default());
queue.start(DataProcessor).await.unwrap();
queue.submit(Job::new(Data { field: 1 })).await.unwrap();
let now = SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("Time went backwards")
.as_millis();
queue
.submit(Job::new_delayed(Data { field: 100 }, now + 10_000))
.await
.unwrap();
tokio::time::sleep(Duration::from_secs(15)).await;
}
依赖项
~7–16MB
~230K SLoC