5 个版本
0.1.4 | 2024 年 7 月 30 日 |
---|---|
0.1.3 | 2024 年 7 月 29 日 |
0.1.2 | 2024 年 7 月 27 日 |
0.1.1 | 2024 年 7 月 27 日 |
0.1.0 | 2024 年 7 月 26 日 |
#387 在 网络编程
543 每月下载量
用于 2 个 crates (通过 elf_rust)
25KB
338 行
项目描述:云任务执行器
概述
云任务执行器是一个灵活且强大的框架,旨在简化 AWS Lambda 和阿里云函数计算 (FC) 等云环境中的任务执行。它提供统一的接口用于注册和执行任务,管理执行上下文,以及处理执行前后的操作。这种灵活性允许开发者专注于任务的核心逻辑,无需担心底层云基础设施。上层应用链接 elf_rust
主要功能
- 统一任务注册:使用简单且一致的接口注册任务,便于管理不同云环境中的任务。
- 上下文管理:高效管理执行上下文,以线程安全的方式访问共享数据。
- 执行前后操作:定义在主任务执行前后要执行的操作,以实现额外的处理和上下文修改。
- 云无关执行:在 AWS Lambda、阿里云 FC 或本地开发环境中无缝执行任务,无需更改核心任务逻辑。
- 自动处理有效载荷:使用内置的 JSON 解析和上下文初始化简化任务有效载荷处理。
架构
云任务执行器采用模块化架构,包括以下关键组件
- 任务:可以执行具有特定上下文和有效载荷的工作单元。任务使用自定义过程宏定义,易于注册。
- 上下文:一个线程安全的共享数据存储,用于在任务执行之间维护状态。上下文可以被预操作修改,并在任务执行期间访问。
- 预操作:一个闭包,在主任务执行之前修改上下文或有效负载。
- 后操作:一个闭包,处理任务执行的结果,并可以修改最终输出。
- 执行器:负责管理任务注册、上下文初始化、预操作和后操作,以及在各个环境中执行任务的内核组件。
用法
可以使用提供的crate轻松地将Cloud Task Executor集成到您的Rust项目中。要开始,请在Cargo.toml文件中添加以下依赖项
[dependencies]
cloud_task_executor = "0.1.4"
接下来,将crate导入到您的项目中
use cloud_task_executor::*;
注册任务
任务使用自定义过程宏cte_task进行注册。此宏通过自动生成必要的样板代码简化了任务注册过程。要注册任务,定义一个具有#[cte_task]属性的函数,并指定任务名称和描述。
#[cte_task(name = "my_task")]
async fn my_task(ctx: Context, payload: Value) -> Result<String, String> {
let sample_value = ctx.get("sample_key").expect("sample_key not found");
let payload_str = payload.get("payload_key").and_then(Value::as_str).unwrap_or("default_value");
let runtime = ctx.get(KEY_RUNTIME).unwrap();
println!("Task running with sample value: {}, payload: {}, runtime {}", sample_value, payload_str, runtime);
Ok("Task result".to_string())
}
设置执行器
执行器使用上下文初始化器、预操作、后操作和任务进行设置。
let mut executor = Executor::new();
executor.set_initializer(|ctx| {
ctx.set("sample_key", "sample_value".to_string());
});
executor.set_before_action(|ctx, payload| {
ctx.set("modified_key", "test".to_string());
let mut new_payload = json!({"test": 1});
if let Value::Object(map) = payload {
if let Value::Object(new_map) = &mut new_payload {
for (k, v) in map {
new_map.insert(k.clone(), v.clone());
}
}
}
new_payload
});
executor.set_after_action(|ctx, payload, result| {
let context = ctx;
println!("Task executed with payload: {:?}, result: {:?}", payload, result);
result.map(|res| format!("{} - after action", res))
});
executor.set_task(my_task());
运行执行器
执行器可以在不同的环境中运行,包括本地开发、AWS Lambda和阿里云FC。
#[tokio::main]
async fn main() {
let result = executor.run().await;
match result {
Ok(msg) => println!("{}", msg),
Err(err) => eprintln!("Error: {}", err),
}
}
本地运行执行器
cargo run -- --payload '{}'
结论
Cloud Task Executor是开发者用来简化云任务执行工作流程的强大工具。凭借其统一的接口、强大的上下文管理和灵活的预操作和后操作,它简化了在各种云环境中编写、注册和执行任务的过程。
本描述应提供对您的项目的清晰全面概述,突出其功能、架构和用法。如果您需要任何进一步的调整或额外详细信息,请告诉我!
许可证
本项目采用MIT许可证 - 有关详细信息,请参阅LICENSE文件。
依赖关系
~13–27MB
~418K SLoC