LightFlow:一个基于函数式编程的任务编排框架

简介: **LightFlow** 是一个基于 Go 语言的任务编排框架,简化复杂任务流的设计与管理。它通过函数式编程让开发者直接在代码中定义任务流,无需繁琐配置。选择 LightFlow 可简化任务流管理,专注于执行时机,提升维护性和可扩展性。核心特性包括隔离性上下文、基于执行时机的编排、流程合并、智能资源管理、断点恢复等。安装简单,提供丰富的文档支持,帮助快速上手并高效管理任务流。

在现代软件开发中,任务流的管理常常让人头疼。现在,LightFlow 诞生了!这是一个基于 Go 语言的任务编排框架,旨在简化复杂任务流的设计与管理。通过函数式编程,LightFlow 使开发者能够在代码中直接定义任务流,将重点放在任务的执行时机,而无需繁琐的配置文件和规则。

为什么选择 LightFlow?

  1. 简化任务流管理:告别外部规则语言,LightFlow 允许开发者在代码中定义所有任务依赖,减少频繁切换上下文的烦恼。
  2. 专注执行时机:只需明确任务的依赖步骤,框架将自动处理任务执行顺序,极大降低全局依赖管理的复杂性。
  3. 提升维护性和可扩展性:即使任务流不断扩展,确定任务执行时机仍然是一项简单而基本的工作。

核心特性

  • 隔离性上下文:各个步骤通过独立的上下文链接,确保只访问相关数据,避免全局混乱。
  • 基于执行时机的编排:灵活地定义任务流,精准控制任务的执行时机,实现高效管理。
  • 流程合并功能:允许将现有流程合并到新的流程中,优化整体管理。
  • 智能资源管理:自动处理资源的分配和释放,支持断点恢复。
  • 断点恢复机制:支持任务在失败后从失败点恢复执行,避免重复运行。
  • 条件执行控制:根据条件灵活决定任务的执行与跳过。
  • 多级回调机制:在多个层级设置回调,轻松管理任务状态。
  • 强大的事件处理:处理任务执行阶段外的错误,允许为每个阶段配置事件处理器。
  • 自定义持久化插件:用户可以根据需求自定义持久化插件,LightFlow 不与任何 ORM 框架耦合,灵活性更高。

快速上手

安装

通过以下命令轻松安装 LightFlow:

go get github.com/Bilibotter/light-flow/flow

示例代码

以下示例展示了如何使用 LightFlow 进行任务编排:

package main

import (
    "fmt"
    "github.com/Bilibotter/light-flow/flow"
)

func First(step flow.Step) (any, error) {
   
    if input, exist := step.Get("input"); exist {
   
        fmt.Printf("[Step: %s] get input: %v\n", step.Name(), input)
    }
    step.Set("key", "value")
    return "result", nil
}

func Second(step flow.Step) (any, error) {
   
    if value, exist := step.Get("key"); exist {
   
        fmt.Printf("[Step: %s] get key: %v\n", step.Name(), value)
    }
    if result, exist := step.Result(step.Dependents()[0]); exist {
   
        fmt.Printf("[Step: %s] get result: %v\n", step.Name(), result)
    }
    return nil, nil
}

func ErrorStep(step flow.Step) (any, error) {
   
    if value, exist := step.Get("key"); exist {
   
        fmt.Printf("[Step: %s] get key: %v\n", step.Name(), value)
    } else {
   
        fmt.Printf("[Step: %s] cannot get key \n", step.Name())
    }
    return nil, fmt.Errorf("execute failed")
}

func ErrorHandler(step flow.Step) (bool, error) {
   
    if step.Has(flow.Failed) {
   
        fmt.Printf("[Step: %s] has failed\n", step.Name())
    } else {
   
        fmt.Printf("[Step: %s] success\n", step.Name())
    }
    return true, nil
}

func init() {
   
    process := flow.FlowWithProcess("Example")
    process.Follow(First, Second)
    process.Follow(ErrorStep)
    process.AfterStep(true, ErrorHandler)
}

func main() {
   
    flow.DoneFlow("Example", map[string]any{
   "input": "Hello world"})
}

输出示例

执行上述代码后,你将看到如下输出:

[Step: First] get input: Hello world
[Step: First] success
[Step: Second] get key: value
[Step: Second] get result: result
[Step: Second] success
[Step: ErrorStep] cannot get key 
[Step: ErrorStep] has failed

使用步骤

  1. 定义步骤:编写你的 Step 函数,使用 step.Getstep.Set 与上下文交互。查看文档
  2. 创建流程:在 init 函数中定义流程并添加步骤。查看文档
  3. 错误处理:利用回调管理各种错误情况。查看文档
  4. 启动执行:调用 flow.DoneFlow 方法开始执行流程,传入必要的输入数据。

LightFlow 设计为尽可能执行所有任务,即便某个任务失败,只有依赖于该任务的后续任务会被跳过,而其他不相关的任务仍将继续运行。

这种设计支持断点恢复,确保在错误发生时系统仍能有效执行未受影响的部分。

相关文章
|
前端开发 Java C#
java/C#语言开发的医疗信息系统11套源码
java/C#语言开发的医疗信息系统11套源码
334 2
|
消息中间件 存储 缓存
消息中间件系列教程(06) -RabbitMQ -五种队列形式
消息中间件系列教程(06) -RabbitMQ -五种队列形式
1879 1
|
3月前
|
机器学习/深度学习 存储 算法
Trinity-RFT:构建智能体持续学习的自动化强化微调工厂
大型语言模型作为智能体在真实环境中持续交互学习面临诸多挑战。 Trinity-RFT 是通义实验室推出的强化微调框架,旨在实现智能体的持续进化。它通过探索、训练与经验池的解耦设计,支持多样化训练模式,提升资源利用率和学习稳定性。同时,Trinity-RFT 提供灵活的数据处理与算法模块化功能,降低应用与研究门槛,助力迈向终身学习与自主进化的智能体时代。
300 2
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
4874 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
前端开发 搜索推荐 数据可视化
阿里低代码引擎LowCodeEngine正式开源
低代码引擎是一款为低代码平台开发者提供的,具备强大扩展能力的低代码研发框架。由阿里巴巴前端委员会、钉钉宜搭联合出品。使用者只需要基于低代码引擎便可以快速定制符合自己业务需求的低代码平台。
阿里低代码引擎LowCodeEngine正式开源
|
XML 存储 Java
万字+40张图带你探秘小而美的规则引擎框架LiteFlow
在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这些核心业务有关,这些核心业务业务逻辑冗长,涉及内部逻辑运算,缓存操作,持久化操作,外部资源调取,内部其他系统RPC调用等等。时间一长,项目几经易手,维护的成本就会越来越高。各种硬代码判断,分支条件越来越多。代码的抽象,复用率也越来越低,各个模块之间的耦合度很高。一小段逻辑的变动,会影响到其他模块,需要进行完整回归测试来验证。如要灵活改变业务流程的顺序,则要进行代码大改动进行抽象,重新写方法。实时热变更业务流程,几乎很难实现。
|
并行计算 开发工具 异构计算
在Windows平台使用源码编译和安装PyTorch3D指定版本
【10月更文挑战第6天】在 Windows 平台上,编译和安装指定版本的 PyTorch3D 需要先安装 Python、Visual Studio Build Tools 和 CUDA(如有需要),然后通过 Git 获取源码。建议创建虚拟环境以隔离依赖,并使用 `pip` 安装所需库。最后,在源码目录下运行 `python setup.py install` 进行编译和安装。完成后即可在 Python 中导入 PyTorch3D 使用。
1284 0
|
消息中间件 运维 Kubernetes
工作中用Go: Go中异步任务怎么写
工作中用Go: Go中异步任务怎么写
3651 0
工作中用Go: Go中异步任务怎么写
|
存储 缓存 监控
Etcd/Raft 原理问题之Etcd-Raft节点故障问题如何解决
Etcd/Raft 原理问题之Etcd-Raft节点故障问题如何解决
213 2
|
存储 移动开发 Android开发
使用kotlin Jetpack Compose框架开发安卓app, webview中h5如何访问手机存储上传文件
在Kotlin和Jetpack Compose中,集成WebView以支持HTML5页面访问手机存储及上传音频文件涉及关键步骤:1) 添加`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限,考虑Android 11的分区存储;2) 配置WebView允许JavaScript和文件访问,启用`javaScriptEnabled`、`allowFileAccess`等设置;3) HTML5页面使用`<input type="file">`让用户选择文件,利用File API;

热门文章

最新文章