#task-execution #aws-lambda #task #lambda #alibaba #aws #fc

bin+lib cloud_task_executor

云任务执行器是一个灵活且强大的框架,旨在简化 AWS Lambda 和阿里云函数计算 (FC) 等云环境中的任务执行。它提供统一的接口用于注册和执行任务,管理执行上下文,以及处理执行前后的操作。这种灵活性允许开发者专注于任务的核心逻辑,无需担心底层云基础设施。

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网络编程

Download history 125/week @ 2024-07-21 408/week @ 2024-07-28 10/week @ 2024-08-04

543 每月下载量
用于 2 个 crates (通过 elf_rust)

MIT 许可证

25KB
338

项目描述:云任务执行器

概述

云任务执行器是一个灵活且强大的框架,旨在简化 AWS Lambda 和阿里云函数计算 (FC) 等云环境中的任务执行。它提供统一的接口用于注册和执行任务,管理执行上下文,以及处理执行前后的操作。这种灵活性允许开发者专注于任务的核心逻辑,无需担心底层云基础设施。上层应用链接 elf_rust

主要功能

  • 统一任务注册:使用简单且一致的接口注册任务,便于管理不同云环境中的任务。
  • 上下文管理:高效管理执行上下文,以线程安全的方式访问共享数据。
  • 执行前后操作:定义在主任务执行前后要执行的操作,以实现额外的处理和上下文修改。
  • 云无关执行:在 AWS Lambda、阿里云 FC 或本地开发环境中无缝执行任务,无需更改核心任务逻辑。
  • 自动处理有效载荷:使用内置的 JSON 解析和上下文初始化简化任务有效载荷处理。

架构

云任务执行器采用模块化架构,包括以下关键组件

  1. 任务:可以执行具有特定上下文和有效载荷的工作单元。任务使用自定义过程宏定义,易于注册。
  2. 上下文:一个线程安全的共享数据存储,用于在任务执行之间维护状态。上下文可以被预操作修改,并在任务执行期间访问。
  3. 预操作:一个闭包,在主任务执行之前修改上下文或有效负载。
  4. 后操作:一个闭包,处理任务执行的结果,并可以修改最终输出。
  5. 执行器:负责管理任务注册、上下文初始化、预操作和后操作,以及在各个环境中执行任务的内核组件。

用法

可以使用提供的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