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

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

相关文章
|
5月前
|
Python
面向对象编程:核心概念与实践
面向对象编程:核心概念与实践
70 0
|
12月前
|
关系型数据库 MySQL Go
Go语言微服务框架 - 8.Gormer迭代-定制专属的ORM代码生成工具
我们对比一下GORM库提供的`gorm.Model`,它在新增、修改时,会自动修改对应的时间,这个可以帮我们减少很多重复性的代码编写。这里,我就针对现有的gormer工具做一个示例性的迭代。
89 0
|
5月前
|
存储 JSON 数据格式
2.核心概念
2.核心概念
|
3月前
|
运维
开发与运维编程问题之常见的编程范式的响应式编程如何解决
开发与运维编程问题之常见的编程范式的响应式编程如何解决
|
3月前
|
SQL Rust 算法
开发与运维编程问题之常见的编程范式的声明式编程如何解决
开发与运维编程问题之常见的编程范式的声明式编程如何解决
|
4月前
|
存储 Kubernetes 调度
K8S中的核心概念
【6月更文挑战第25天】k8s资源对象可以用yaml或者json格式声明。每个资源对象都有自己的特定结构定义,并统一保存在etcd这种非关系型数据库中。
|
5月前
|
存储 C# 开发者
深入了解 C#编程的核心概念
【4月更文挑战第20天】C#是一种强大的面向对象编程语言,关键概念包括:面向对象(类、对象、继承、多态)、封装、数据类型、变量与常量、控制流、异常处理、委托和事件、泛型及集合。掌握这些概念并通过阅读代码、实践编写和学习新技巧行动,是成为熟练C#开发者的基石。了解并运用这些核心概念能提升代码效率、灵活性和可维护性。
53 3
|
5月前
|
安全 Java 开发者
构建高效微服务架构:后端开发的新范式Java中的多线程并发编程实践
【4月更文挑战第29天】在数字化转型的浪潮中,微服务架构已成为软件开发的一大趋势。它通过解耦复杂系统、提升可伸缩性和促进敏捷开发来满足现代企业不断变化的业务需求。本文将深入探讨微服务的核心概念、设计原则以及如何利用最新的后端技术栈构建和部署高效的微服务架构。我们将分析微服务带来的挑战,包括服务治理、数据一致性和网络延迟问题,并讨论相应的解决方案。通过实际案例分析和最佳实践的分享,旨在为后端开发者提供一套实施微服务的全面指导。 【4月更文挑战第29天】在现代软件开发中,多线程技术是提高程序性能和响应能力的重要手段。本文通过介绍Java语言的多线程机制,探讨了如何有效地实现线程同步和通信,以及如
|
5月前
|
消息中间件 开发者 微服务
构建高效代码:模块化设计原则的实践与思考
在软件开发的世界中,编写可维护、可扩展且高效的代码是每个开发者追求的目标。本文将探讨如何通过应用模块化设计原则来提升代码质量,分享一些实践中的经验教训以及对未来技术趋势的思考。
|
5月前
|
消息中间件 设计模式 监控
简洁应用框架VSEF的架构
简洁应用框架VSEF的架构
129 0