cool_task/
lib.rs

1//! # cool-task
2//!
3//! cool-admin Rust 任务队列库,基于 Redis 实现分布式任务队列。
4//!
5//! ## 功能特性
6//!
7//! - 🚀 基于 Redis 的分布式任务队列
8//! - ⏰ 支持定时任务(Cron 表达式)
9//! - 🔄 支持延迟任务
10//! - 📊 任务状态管理
11//! - 🔁 失败重试机制
12//!
13//! ## 快速开始
14//!
15//! ```rust,ignore
16//! use cool_task::prelude::*;
17//!
18//! #[derive(Serialize, Deserialize)]
19//! struct EmailJob {
20//!     to: String,
21//!     subject: String,
22//!     body: String,
23//! }
24//!
25//! #[async_trait]
26//! impl JobHandler for EmailJob {
27//!     async fn handle(&self) -> JobResult<()> {
28//!         // 发送邮件逻辑
29//!         Ok(())
30//!     }
31//! }
32//! ```
33
34mod base;
35mod job;
36mod queue;
37mod scheduler;
38mod worker;
39
40pub use base::*;
41pub use job::*;
42pub use queue::*;
43pub use scheduler::*;
44pub use worker::*;
45
46/// 队列类型,对齐 TS 版本的 `type?: 'comm' | 'getter' | 'noworker' | 'single'`
47#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
48pub enum QueueType {
49    /// 普通队列,带 Worker
50    #[default]
51    Comm,
52    /// 仅获取队列信息(对应 TS 的 getter)
53    Getter,
54    /// 不自动创建 Worker(仅生产,不消费)
55    NoWorker,
56    /// 单例队列(通常用于全局唯一任务)
57    Single,
58}
59
60/// 队列配置,对齐 TS 版本 `CoolQueue` 装饰器的配置结构
61///
62/// 在 Rust 中通过 `#[cool_queue(...)]` 宏自动生成。
63#[derive(Debug, Clone)]
64pub struct QueueConfig {
65    /// 队列类型
66    pub queue_type: QueueType,
67    /// 默认任务配置
68    pub default_job: job::JobOptions,
69    /// Worker 配置
70    pub worker: worker::WorkerConfig,
71}
72
73/// 预导入模块
74pub mod prelude {
75    pub use crate::base::BaseQueue;
76    pub use crate::job::{Job, JobHandler, JobOptions, JobResult, JobStatus};
77    pub use crate::queue::Queue;
78    pub use crate::scheduler::Scheduler;
79    pub use crate::worker::Worker;
80    pub use crate::{QueueConfig, QueueType};
81    pub use async_trait::async_trait;
82    pub use serde::{Deserialize, Serialize};
83}
84
85/// 任务配置
86#[derive(Debug, Clone)]
87pub struct TaskConfig {
88    /// Redis URL
89    pub redis_url: String,
90    /// 队列名称前缀
91    pub prefix: String,
92    /// 默认重试次数
93    pub default_retries: u32,
94    /// 默认超时时间(秒)
95    pub default_timeout: u64,
96    /// Worker 并发数
97    pub concurrency: usize,
98}
99
100impl Default for TaskConfig {
101    fn default() -> Self {
102        Self {
103            redis_url: "redis://127.0.0.1:6379".to_string(),
104            prefix: "cool:task".to_string(),
105            default_retries: 3,
106            default_timeout: 60,
107            concurrency: 4,
108        }
109    }
110}