在当今快速迭代的软件开发环境中,如何高效地管理和执行业务流程成为了开发者面临的重要挑战。Solon Flow作为Solon生态中的流程编排引擎,以其轻量级、高灵活性和强大的表达能力,为开发者提供了一种全新的解决方案。

为什么选择Solon Flow?

Solon Flow是一款基于YAML/JSON配置的流程编排引擎,它完美融合了"配置即代码"的理念,具有以下核心优势:

  • 极简配置:采用YAML/JSON格式,配置简洁直观,支持自动推断和简化模式
  • 多场景支持:无缝支持业务规则编排、计算任务编排、审批流程等多种场景
  • 强大脚本能力:内置完整Java语法支持,可与多种脚本引擎集成
  • 事件驱动架构:基于DamiBus实现的事件总线,实现组件间解耦
  • 双模式引擎:同时支持无状态和有状态流程,满足不同业务需求

快速入门体验

让我们通过一个简单的Hello World示例,感受Solon Flow的魅力:

1. 添加依赖

<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-flow</artifactId>
</dependency>

2. 配置流程(demo1.chain.yml)

id: "c1"
layout:
- { id: "n1", type: "start", link: "n2"}
- { id: "n2", type: "activity", link: "n3", task: "System.out.println(\"Hello Solon Flow!\");"}
- { id: "n3", type: "end"}

3. 执行流程

@Component
public class DemoApp implements LifecycleBean {
@Inject
private FlowEngine flowEngine; @Override
public void start() {
flowEngine.eval("c1"); // 输出:Hello Solon Flow!
}
}

核心功能解析

1. 灵活的流程配置

Solon Flow支持完整的流程图概念,包括链(Chain)、节点(Node)和连接(Link)。节点类型丰富:

  • 开始节点(start):流程入口,每个链必须有且只有一个
  • 活动节点(activity):执行具体任务,支持条件和脚本
  • 网关节点(inclusive/exclusive/parallel):控制流程分支
  • 结束节点(end):流程终点
# 审批流程示例
id: "leave-approval"
title: "请假审批"
layout:
- { id: "start", type: "start", title: "发起申请", meta: {form: "leave"}, link: "tl-review"}
- { id: "tl-review", type: "activity", title: "主管审批", meta: {role: "team-leader"}, link: "gate-3days"}
- { id: "gate-3days", type: "exclusive", link: [
{nextId: "dm-review", title: "超过3天", condition: "days > 3"},
{nextId: "end", title: "3天内"}
]}
- { id: "dm-review", type: "activity", title: "部门经理审批", meta: {role: "dept-manager"}, link: "end"}
- { id: "end", type: "end"}

2. 强大的脚本与表达式

Solon Flow默认支持完整的Java语法脚本,同时可通过定制驱动器集成Aviator、Beetl等脚本引擎:

# 业务规则示例
id: "risk-control"
layout:
- { type: "start"}
- { when: "score < 60", task: "context.result = '高风险'; actions.add('人工审核')"}
- { when: "score >= 60 && score < 80", task: "context.result = '中风险'"}
- { when: "score >= 80", task: "context.result = '低风险'; actions.add('自动通过')"}
- { type: "end"}

3. 组件化开发模式

通过实现TaskComponent接口,可以将业务逻辑封装为可复用的组件:

@Component("scoreCalc")
public class ScoreCalculator implements TaskComponent {
@Override
public void run(FlowContext context, Node node) {
Order order = context.get("order");
// 计算逻辑...
order.setScore(calculateScore(order));
} private int calculateScore(Order order) {
// 评分算法实现
}
}

在流程中引用组件:

id: "order-process"
layout:
- { type: "start"}
- { task: "@scoreCalc"} # 使用评分组件
- { task: "@riskCheck"} # 使用风控组件
- { type: "end"}

4. 事件驱动架构

Solon Flow内置基于DamiBus的事件总线,实现组件间解耦:

# 事件发送示例
id: "event-demo"
layout:
- task: |
// 发送事件
context.eventBus().send("order.created", order);
- task: |
// 发送并等待响应
String result = context.<String,String>eventBus()
.sendAndRequest("risk.check", order);

事件监听处理:

public class RiskListener {
@Inject
private FlowEngine engine; public void init() {
FlowContext context = new FlowContext();
context.<String,String>eventBus().listen("risk.check", event -> {
Order order = event.getContent();
event.reply(checkRisk(order));
}); engine.eval("event-demo", context);
}
}

企业级特性

1. 有状态流程支持

对于审批类场景,Solon Flow提供了StatefulFlowEngine:

// 配置有状态引擎
@Bean
public StatefulFlowEngine flowEngine() {
return StatefulFlowEngine.newInstance(
StatefulSimpleFlowDriver.builder()
.stateController(new RoleBasedStateController())
.stateRepository(new RedisStateRepository())
.build()
);
} // 审批处理示例
public void approve(String instanceId, String nodeId, String userId) {
FlowContext context = new FlowContext(instanceId).put("user", userId);
flowEngine.postActivityState(context, nodeId, StateType.COMPLETED);
}

2. 拦截器机制

通过ChainInterceptor可以实现流程监控、日志记录等横切关注点:

@Component
public class MetricsInterceptor implements ChainInterceptor {
@Override
public void doIntercept(ChainInvocation inv) throws Throwable {
long start = System.currentTimeMillis();
try {
inv.invoke();
} finally {
long cost = System.currentTimeMillis() - start;
Metrics.record(inv.getChain().id(), cost);
}
}
}

3. 多环境支持

Solon Flow可以轻松集成到各种环境:

// Spring集成示例
@Configuration
public class SpringConfig {
@Bean
public FlowEngine flowEngine(ApplicationContext ctx) {
FlowEngine engine = FlowEngine.newInstance();
engine.register(new SimpleFlowDriver(new SpringAdapter(ctx)));
engine.load("classpath:flows/**/*.yml");
return engine;
}
} // 原生Java环境
public class NativeApp {
public static void main(String[] args) {
FlowEngine engine = FlowEngine.newInstance();
engine.load("file:conf/flows/*.json");
engine.eval("main-flow");
}
}

典型应用场景

1. 业务规则引擎

替代Drools等规则引擎,配置更简单:

id: "discount-rule"
layout:
- { type: "start"}
- { when: "user.level == 'VIP' && cart.total > 1000", task: "cart.discount = 0.2"}
- { when: "user.level == 'VIP'", task: "cart.discount = 0.1"}
- { when: "cart.total > 500", task: "cart.discount = 0.05"}
- { type: "end"}

2. 计算任务编排

类似LiteFlow的编排能力,但风格很不同:

id: "data-pipeline"
layout:
- { type: "start"}
- { task: "@dataExtract"}
- { task: "@dataTransform"}
- { task: "@dataLoad"}
- { type: "end"}

3. 审批流程管理

类似 Flowable 的效果。支持会签、或签等审批模式:

id: "contract-approval"
layout:
- { type: "start", title: "发起合同", link: "finance"}
- { id: "finance", type: "parallel", title: "财务会签", link: ["f1", "f2"]}
- { id: "f1", type: "activity", title: "财务经理审批", meta: {role: "finance-mgr"}, link: "join"}
- { id: "f2", type: "activity", title: "财务总监审批", meta: {role: "finance-dir"}, link: "join"}
- { id: "join", type: "parallel", link: "legal"}
- { id: "legal", type: "activity", title: "法务审核", meta: {role: "legal"}, link: "end"}
- { type: "end"}

为什么Solon Flow值得尝试?

  • 学习成本低:基于熟悉的YAML/JSON配置,半小时即可上手
  • 无缝集成:轻松融入Spring、Solon等各种Java生态
  • 性能优异:轻量级设计,单线程每秒可执行上万次简单流程
  • 灵活扩展:支持驱动器定制,满足各种特殊需求
  • 生产验证:已在多家企业生产环境稳定运行

Solon Flow重新定义了流程编排的方式,让开发者能够以更声明式的方式表达业务逻辑,大幅提升开发效率的同时,保证了系统的可维护性和扩展性。无论是简单的业务规则,还是复杂的审批流程,Solon Flow都能优雅应对。

Solon Flow:轻量级流程编排引擎,让业务逻辑更优雅的更多相关文章

  1. 流程编排、如此简单-通用流程编排组件JDEasyFlow介绍

    作者:李玉亮 JDEasyFlow是企业金融研发部自研的通用流程编排技术组件,适用于服务编排.工作流.审批流等场景,该组件已开源(https://github.com/JDEasyFlow/jd-ea ...

  2. 开源组件编排引擎LiteFlow发布里程碑版本2.5.0

    介绍 LiteFlow作为一款轻量级组件编排框架,自开源来,获得了挺多人的关注.社区群也扩展到了接近200人. 早期版本因为疏忽打理,有一些BUG,迭代也不及时.距离上一个稳定版本2.3.3,已经有超 ...

  3. 基于netty http协议栈的轻量级流程控制组件的实现

    今儿个是冬至,所谓“冬大过年”,公司也应景五点钟就放大伙儿回家吃饺子喝羊肉汤了,而我本着极高的职业素养依然坚持留在公司(实则因为没饺子吃没羊肉汤喝,只能呆公司吃食堂……).趁着这一个多小时的时间,想跟 ...

  4. netflix:Conductor微服务编排引擎

    项目地址: https://github.com/Netflix/conductor Conductor 是 Netflix 受需要运行全球流媒体业务流程的启发,构建的基于云的微服务编排引擎. Con ...

  5. jsplumbWithVue实现流程编排

    最近业务需求,通过拖拽,实现流程编排,包括编排元素中的各种属性,刚开始拿到这个需求,一头雾水啊,找度娘渡了好久,FQ翻了很久,各种博客CSDN搜索,最终技术选型还是定在了jsplumb,这要感谢@萌级 ...

  6. Karmada 多云容器编排引擎支持多调度组,助力成本优化

    摘要:Karmada 社区也在持续关注云成本的管理,在最近发布的 v1.5 版本中,支持用户在分发策略 PropagationPolicy/ClusterPropagationPolicy 中设置多个 ...

  7. FluentData-新型轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码

    FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 ...

  8. IT的灵魂是流程,流程的灵魂是业务,业务的灵魂是战略

    IT的灵魂是流程,流程的灵魂是业务,业务的灵魂是战略.高效的IT平台不在于IT技术,而在于好的管理模式与流程设计 从以组织为核心转向以流程为核心 流程管理核心是从流程角度出发,关注流程是否增值,籍此建 ...

  9. Git flow 的流程

    Git flow 的流程与参考   Git flow 出自 A successful Git branching model,这里使用了一个前端项目配合本文稿实施了 git flow 并记录流程作出示 ...

  10. 对比剖析Swarm Kubernetes Marathon编排引擎

    Docker Native Orchestration 基本结构 Docker Engine 1.12 集成了原生的编排引擎,用以替换了之前独立的Docker Swarm项目.Docker原生集群(S ...

随机推荐

  1. ANSYS 命令流导航

    常见书籍 ANSYS 命令流导航 GitHub 项目:ANSYS_Code Gitee 镜像:ANSYS_Code 欢迎补充~ 文件说明 doc 中包括 ANSYS, ABAQUS, LS-DYNA ...

  2. 【Web】Servlet基本概念

    Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据, ...

  3. 学习unigui【20】unistringGrid

    做成下面效果图: 采用unistringGrid控件. 问题: 1.不同的日期区间如何得到.如: 项目   开始时间时间 -- 终止使用时间 呼吸机  yyyy-mm-dd   yyyy-mm-dd ...

  4. python的typer写cli脚本如此简单

    # typer_demo.py import typer from pathlib import Path from typing import Optional from typing_extens ...

  5. 使用 AutoGen Studio 打造你的私有团队

    AI Agent 无疑是今年最火爆的概念,从科技巨头的战略布局到创业公司的创新产品,AI 智能体正在重塑我们与机器交互的方式.无论是自动化任务.个性化服务,还是复杂问题的协同解决,AI Agent 都 ...

  6. WPF静态资源StaticResource和动态资源DynamicResource有什么区别,x:Static又是什么意思?

    什么叫WPF的资源(Resource) 资源是保存在可执行文件中的一种不可执行数据.WPF中资源用ResourceDictionary类表示,这个类就是一个字典,字典的key和value都是objec ...

  7. selenium IDE简单使用

    selenium IDE可理解为录制操作浏览器的过程,然后回放实现UI级的自动化 一,首先安装,本案例主要在谷歌浏览器上使用,所以用的是支持谷歌的IDE文件 下载,打开https://www.crx4 ...

  8. js录制系统/麦克风声音(基于electron)

    最近想用electron写一个和音视频相关的软件,尽管在写之前都想好了要用哪些技术,但依然写得很艰难,今天对相关知识的个人理解做个记录和整理. 时隔半年,最近发现网上有大神造好的轮子,而且功能强大:h ...

  9. sonarqube+gitlab+jenkins+maven集成搭建(二)

    SonarQubeScanner 下载[root@localhost ~]# wget https://binaries.sonarsource.com/Distribution/sonar-scan ...

  10. 7.9K star!免费解锁Cursor Pro功能,这个开源神器太强了!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "无需付费即可畅享AI编程神器Cursor的Pro功能,支持Windows/mac ...