DevOps研发效能
媒体矩阵
开源中国APP
授权协议 Apache-2.0
开发语言 Java JavaScript HTML/CSS
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发工作流引擎
开源组织
地区 国产
投 递 者 梅子酒好吃
适用人群 未知
收录时间 2025-06-10

软件简介

面向全场景的 Java Flow (流编排)应用开发框架。是 Solon 项目的一部分。也可嵌入到 SpringBoot2、jFinal、Vert.x 等框架中使用。

支持已知流编排的各种场景:

  • 可用于计算(或任务)的编排场景
  • 可用于业务规则和决策处理型的编排场景
  • 可用于办公审批型(有状态、可中断,人员参与)的编排场景
  • 可用于长时间流程(结合自动前进,等待介入)的编排场景

可视化设计器:

嵌入第三方框架的示例:

六大特性展示

1、使用 yaml 格式

配置简洁,关系清晰。内容多了后会像 docker-compose。

# c1.yml
id: "c1"
layout: 
  - { id: "n1", type: "start", link: "n2"}
  - { id: "n2", type: "activity", link: "n3"}
  - { id: "n3", type: "end"}
 

还支持简化模式(能自动推断的,都会自动处理),具体参考相关说明

# c1.yml
id: "c1"
layout: 
  - { type: "start"}
  - { task: ""}
  - { type: "end"}

2、表达式与脚本自由

# c2.yml
id: "c2"
layout: 
  - { type: "start"}
  - { when: "order.getAmount() >= 100", task: "order.setScore(0);"}
  - { when: "order.getAmount() > 100 && order.getAmount() <= 500", task: "order.setScore(100);"}
  - { when: "order.getAmount() > 500 && order.getAmount() <= 1000", task: "order.setScore(500);"}
  - { type: "end"}

3、元数据配置,为扩展提供了无限空间(每个流程,相当于自带了元数据库)

# c3.yml
id: "c3"
layout: 
  - { id: "n1", type: "start", link: "n2"}
  - { id: "n2", type: "activity", link: "n3", meta: {cc: "demo@noear.org"}, task: "@MetaProcessCom"}
  - { id: "n3", type: "end"}
 

通过组件方式,实现元数据的抄送配置效果

@Component("MetaProcessCom")
public class MetaProcessCom implements TaskComponent {
    @Override
    public void run(FlowContext context, Node node) throws Throwable {
       String cc = node.getMeta("cc");
       if(Utils.isNotEmpty(cc)){
           //发送邮件...
       }
    }
}
 

也可通过驱动定制方式,实现抄送效果(显得重一些)

public class OaFlowDriver extends SimpleFlowDriver {
    @Override
    public void handleTask(FlowContext context, Task task) throws Throwable {
        if (Utils.isEmpty(task.getDescription())) {
           String cc = task.getNode().getMeta("cc");
           if(Utils.isNotEmpty(cc)){
               //发送邮件
           }
        } else {
            super.handleTask(context, task);
        }
    }
}

//FlowEngine flowEngine = FlowEngine.newInstance();
//flowEngine.register(new OaFlowDriver()); //替换掉默认驱动

4、事件广播与回调支持

广播(即只需要发送),回调(即发送后要求给答复)

id: f4
layout:
  - task: |
      //只发送
      context.<String,String>eventBus().send("demo.topic", "hello");  //支持泛型(类型按需指定,不指定时为 object)
  - task: |
      //发送并要求响应(就是要给答复)
      String rst = context.<String,String>eventBus().sendAndRequest("demo.topic.get", "hello");
      System.out.println(rst);

5、支持“无状态”、“有状态”两种需求分类

支持丰富的应用场景:

  • 可用于计算(或任务)的编排场景
  • 可用于业务规则和决策处理型的编排场景
  • 可用于办公审批型(有状态、可中断,人员参与)的编排场景
  • 可用于长时间流程(结合自动前进,等待介入)的编排场景

自身也相当于一个低代码的运行引擎(单个 yml 文件,也可满足所有的执行需求)。

6、驱动定制(是像 JDBC 有 MySql, PostgreSQL,还可能有 Elasticsearch)

这是一个定制后的,支持基于状态驱动的流引擎效果。

StatefulFlowEngine flowEngine = new StatefulFlowEngine(StatefulSimpleFlowDriver.builder()
                .stateOperator(new MetaStateOperator("actor"))
                .stateRepository(new InMemoryStateRepository())
                .build());
                
var context = new StatefulFlowContext("i1").put("actor", "陈鑫");

//获取上下文用户的活动节点
var statefulNode = flowEngine.getActivityNode("f1", context);

assert "step2".equals(statefulNode.getNode().getId());
assert StateType.UNKNOWN == statefulNode.getState(); //没有权限启动任务(因为没有配置操作员)

//提交活动状态
flowEngine.postActivityState(context, "f1", statefulNode.getNode().getId(), StateType.COMPLETED);

流程配置样例:

id: f1
layout:
  - {id: step1, title: "发起审批", type: "start"}
  - {id: step2, title: "抄送", meta: {cc: "吕方"}, task: "@OaMetaProcessCom"}
  - {id: step3, title: "审批", meta: {actor: "陈鑫", cc: "吕方"}, task: "@OaMetaProcessCom"}
  - {id: step4, title: "审批", type: "parallel", link: [step4_1, step4_2]}
  - {id: step4_1, meta: {actor: "陈宇"}, link: step4_end}
  - {id: step4_2, meta: {actor: "吕方"}, link: step4_end}
  - {id: step4_end, type: "parallel"}
  - {id: step5, title: "抄送", meta: {cc: "吕方"}, task: "@OaMetaProcessCom"}
  - {id: step6, title: "结束", type: "end"}
对于驱动器的定制,我们还可以:定制(或选择)不同的脚本执行器、组件容器实现等。
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
发表了资讯
06/25 16:02

Solon Flow:轻量级流程编排引擎,让业务逻辑更优雅

在当今快速迭代的软件开发环境中,如何高效地管理和执行业务流程成为了开发者面临的重要挑战。Solon Flow作为Solon生态中的流程编排引擎,以其轻量级、高灵活性和强大的表达能力,为开发者提供了一种全新的解决方案。 为什么选择Solon Flow? Solon Flow是一款基于YAML/JSON配置的流程编排引擎,它完美融合了"配置即代码"的理念,具有以下核心优势: 极简配置:采用YAML/JSON格式,配置简洁直观,支持自动推断和简化模式 多场景...

0
4
发表了资讯
06/20 09:20

Solon Flow v3.3.3 发布,通用流编排框架

Solon Flow v3.3.3 已经发布,通用流编排框架 此版本更新内容包括: 优化 solon-flow FlowContext 变量的线程可见 添加 solon-flow parallel 网关多线程并行支持(通过 context.executor 决定) 添加 solon-flow LinkDecl:when 方法用于替代 :condition(后者标为弃用) 添加 solon-flow parallel 网关多线程并行支持(通过 context.executor 决定) 调整 solon-flow FlowDriver:handleTest 更名为 handleCondition (跟 handle...

0
1
发表了资讯
06/18 15:53

【视频】Solon Flow vs Drools - 业务规则应用对比

探索视频:

0
1
发表了资讯
06/11 10:51

🔥 Solon Flow 设计器入门

探索视频:

0
0
发表了资讯
06/10 10:10

Solon Flow Helloworld(通用流编排框架)

探索视频: 1、新建项目 可以用 Solon Initializr 生成一个模板项目。新建项目之后,添加依赖 <dependency> <groupId>org.noear</groupId> <artifactId>solon-flow</artifactId> </dependency> 2、添加配置 添加应用配置: solon.flow: - "classpath:flow/*.yml" 添加流处理配置(支持 json 或 yml 格式),例: flow/demo1.chain.yml id: "c1" layout: - { id: "n1", type: "start", link: "n2"...

0
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
1 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部