1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//! 异步任务框架
//!
//! 基于 Kafka 消息队列的任务分发与处理框架。
//! 插件本身**不持有任何 SQL 或表结构**——所有持久化通过 `TaskStorage` trait 委托给业务方实现。
//!
//! ## 核心能力
//!
//! - 任务提交(Kafka 消息 + 通过 `TaskStorage` 持久化)
//! - 处理器注册(按 `task_type` 分发到不同业务 Handler)
//! - 重试机制(固定延迟/线性增长/指数退避)+ 死信队列
//! - 任务生命周期标记(PENDING → PROCESSING → COMPLETED/FAILED/CANCELLED/DEAD_LETTER)
//! - `alun_core::Plugin` 集成(通过 `PluginManager` 统一启动/停止)
//! - `#[task_handler]` 宏注解自动发现 Handler(编译期 linkme 收集)
//! - **配置从配置文件 `[task]` section 读取**(`TaskWorkerConfig` 实现 Deserialize)
//!
//! ## 使用方式
//!
//! ```ignore
//! // 1. 实现 TaskStorage(内部通过 db() 全局函数操作数据库)
//! struct DbTaskStorage;
//! impl TaskStorage for DbTaskStorage { ... }
//!
//! // 2. 从配置文件读取配置,创建插件 → 注册到 App
//! let task_cfg: TaskWorkerConfig = cfg().custom.get("task")...unwrap_or_default();
//! let plugin = TaskPlugin::new(
//! task_cfg,
//! Arc::new(DbTaskStorage),
//! HandlerRegistry::new().from_discovered(),
//! )?;
//! app.plugin(plugin).scan().start().await
//! ```
pub use *;
pub use ;
pub use TaskHandler;
pub use HandlerRegistry;
pub use TaskProducer;
pub use TaskWorker;
pub use ;
pub use TaskMetrics;
pub use TaskPlugin;
/// 任务处理器注册条目 —— 编译期由 `#[task_handler]` 宏收集
///
/// 与 linkme distributed_slice 配合使用,实现编译期自动发现。
/// 任务处理器分布式切片 —— `#[task_handler]` 宏注解的 handler 在此汇集
///
/// 使用 linkme 在链接期自动收集所有被注解的 handler,
/// 启动时通过 `HandlerRegistry::from_discovered()` 一键注册。
pub static TASK_HANDLERS: = ;