{"id":28060005,"url":"https://github.com/opensolon/solon-flow","last_synced_at":"2026-01-17T16:29:01.552Z","repository":{"id":284559749,"uuid":"955134679","full_name":"opensolon/solon-flow","owner":"opensolon","description":"Solon Flow 通用流程编排框架（采用 json 和 yaml 编排格式）。可用于计算（或任务）的编排场景；可用于业务规则和决策处理型的编排场景；可用于可中断、可恢复流程（结合自动前进，停止，再执行）的编排场景。同时兼容 java8 ~ java25。也可嵌入到 SpringBoot、jFinal、Vert.X、Quarkus、Micronaut  等框架中使用。","archived":false,"fork":false,"pushed_at":"2026-01-07T01:46:49.000Z","size":2475,"stargazers_count":28,"open_issues_count":4,"forks_count":4,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-07T19:47:41.392Z","etag":null,"topics":["flow-engine","rule-engine","workflow"],"latest_commit_sha":null,"homepage":"https://solon.noear.org","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opensolon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-26T06:52:19.000Z","updated_at":"2026-01-07T01:46:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"e664995a-7610-48b6-93d3-1ec3f2e06dbe","html_url":"https://github.com/opensolon/solon-flow","commit_stats":null,"previous_names":["opensolon/solon-flow"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/opensolon/solon-flow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensolon%2Fsolon-flow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensolon%2Fsolon-flow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensolon%2Fsolon-flow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensolon%2Fsolon-flow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opensolon","download_url":"https://codeload.github.com/opensolon/solon-flow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensolon%2Fsolon-flow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28511865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flow-engine","rule-engine","workflow"],"created_at":"2025-05-12T08:36:37.964Z","updated_at":"2026-01-17T16:29:01.539Z","avatar_url":"https://github.com/opensolon.png","language":"Java","readme":"\u003ch1 align=\"center\" style=\"text-align:center;\"\u003e\n\u003cimg src=\"solon_icon.png\" width=\"128\" /\u003e\n\u003cbr /\u003e\nSolon-Flow\n\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n\t\u003cstrong\u003eJava 通用流程编排框架（采用 yaml 和 json 编排格式）\u003c/strong\u003e\n    \u003cbr/\u003e\n    \u003cstrong\u003e克制、高效、开放\u003c/strong\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\t\u003ca href=\"https://solon.noear.org/article/learn-solon-flow\"\u003ehttps://solon.noear.org/article/learn-solon-flow\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://deepwiki.com/opensolon/solon-flow\"\u003e\u003cimg src=\"https://deepwiki.com/badge.svg\" alt=\"Ask DeepWiki\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://central.sonatype.com/search?q=org.noear%3Asolon-parent\"\u003e\n        \u003cimg src=\"https://img.shields.io/maven-central/v/org.noear/solon.svg?label=Maven%20Central\" alt=\"Maven\" /\u003e\n    \u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"LICENSE\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/:License-Apache2-blue.svg\" alt=\"Apache 2\" /\u003e\n\t\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/badge/JDK-8-green.svg\" alt=\"jdk-8\" /\u003e\n\t\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/badge/JDK-11-green.svg\" alt=\"jdk-11\" /\u003e\n\t\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/badge/JDK-17-green.svg\" alt=\"jdk-17\" /\u003e\n\t\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://www.oracle.com/java/technologies/javase/jdk21-archive-downloads.html\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/badge/JDK-21-green.svg\" alt=\"jdk-21\" /\u003e\n\t\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://www.oracle.com/java/technologies/downloads/\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/badge/JDK-25-green.svg\" alt=\"jdk-25\" /\u003e\n\t\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003ca target=\"_blank\" href='https://gitee.com/opensolon/solon-flow/stargazers'\u003e\n\t\t\u003cimg src='https://gitee.com/opensolon/solon-flow/badge/star.svg' alt='gitee star'/\u003e\n\t\u003c/a\u003e\n    \u003ca target=\"_blank\" href='https://github.com/opensolon/solon-flow/stargazers'\u003e\n\t\t\u003cimg src=\"https://img.shields.io/github/stars/opensolon/solon-flow.svg?style=flat\u0026logo=github\" alt=\"github star\"/\u003e\n\t\u003c/a\u003e\n    \u003ca target=\"_blank\" href='https://gitcode.com/opensolon/solon-flow/stargazers'\u003e\n\t\t\u003cimg src='https://gitcode.com/opensolon/solon-flow/star/badge.svg' alt='gitcode star'/\u003e\n\t\u003c/a\u003e\n\u003c/p\u003e\n\n\u003chr /\u003e\n\n\n## 简介\n\n面向全场景的 Java 流程编排框架。是 Solon 项目的一部分。也可嵌入到 SpringBoot、jFinal、Vert.X、Quarkus、Micronaut 等框架中使用。\n\n支持已知流程编排的各种场景:\n\n* 可用于计算（或任务）的编排场景\n* 可用于业务规则和决策处理型的编排场景\n* 可用于可中断、可恢复流程（结合自动前进，停止，再执行）的编排场景\n* 可用于复杂智能体系统开发（ReActAgent、TreamAgent、Multi-Agent System）\n\n\n可视化设计器：\n\n* https://solon.noear.org/flow/designer/\n* 第三方开源（已组件化）：https://gitee.com/opensolon/solon-flow-bpmn-designer\n\n\n嵌入第三方框架的示例：\n\n* https://gitee.com/solonlab/solon-flow-embedded-examples\n* https://gitcode.com/solonlab/solon-flow-embedded-examples\n* https://github.com/solonlab/solon-flow-embedded-examples\n\n\n## 主要概念\n\n\n| 概念          | 简称          | 备注            | 相关接口                | \n|-------------|-------------|---------------|---------------------| \n| 流程图         | 图（或流图）      |               | Graph, GraphSpec    | \n| 流程节点        | 节点（或流节点）    | 可带任务，可带任务条件   | Node, NodeSpec      | \n| 流程连接线       | 连接（或流连接）    | 可带连接条件        | Link, LinkSpec      | \n|             |             |               |                     | \n| 流程引擎（用于执行图） | 引擎（流引擎）     |               | FlowEngine          | \n| 流程驱动器       | 驱动器（流驱动器）   |               | FlowDriver          | \n|             |             |               |                     | \n| 流程上下文       | 上下文（或流上下文）  |               | FlowContext         | \n| 流程拦截器       | 拦截器（或流拦截器）  |               | FlowInterceptor     | \n\n\n\n概念关系描述（就像用工具画图）：\n\n* 一个图（Graph），由多个节点（Node）和连接（Link）组成。\n* 一个节点（Node），会有多个连接（Link，也叫“流出连接”）连向别的节点。\n    * 连接向其它节点，称为：流出连接。\n    * 被其它节点连接，称为：流入连接。\n* 一个图“必须有且只有”一个 start 类型的节点，且从 start 节点开始，顺着连接（Link）流出。\n* 引擎在执行图的过程，可以有上下文（FlowContext），可以被阻断分支或停止执行\n\n\n通俗些，一个图就是通过 “点”（节点） + “线”（连接）画出来的一个结构。\n\n\n## 五大特性展示\n\n### 1、采用 yaml 或 json 偏平式编排格式\n\n偏平式编排，没有深度结构（所有节点平铺，使用 link 描述连接关系）。配置简洁，逻辑一目了然\n\n```yaml\n# c1.yml\nid: \"c1\"\nlayout: \n  - { id: \"n1\", type: \"start\", link: \"n2\"}\n  - { id: \"n2\", type: \"activity\", link: \"n3\"}\n  - { id: \"n3\", type: \"end\"}\n```\n\n### 2、表达式与脚本自由\n\n支持内置表达式引擎，动态控制流程逻辑。\n\n```yaml\n# c2.yml\nid: \"c2\"\nlayout: \n  - { type: \"start\"}\n  - { when: \"order.getAmount() \u003e= 100\", task: \"order.setScore(0);\"}\n  - { when: \"order.getAmount() \u003e 100 \u0026\u0026 order.getAmount() \u003c= 500\", task: \"order.setScore(100);\"}\n  - { when: \"order.getAmount() \u003e 500 \u0026\u0026 order.getAmount() \u003c= 1000\", task: \"order.setScore(500);\"}\n  - { type: \"end\"}\n```\n\n### 3、元数据配置，无限扩展空间\n\n元数据主要有两个作用：（1）为任务运行提供配置支持（2）为视图编辑提供配置支持\n\n```yaml\n# c3.yml\nid: \"c3\"\nlayout: \n  - { id: \"n1\", type: \"start\", link: \"n2\"}\n  - { id: \"n2\", type: \"activity\", link: \"n3\", task: \"@MetaProcessCom\", meta: {cc: \"demo@noear.org\"}}\n  - { id: \"n3\", type: \"end\"}\n```\n\n### 4、上下文快照持久化：中断与恢复\n\n支持输出快照（Snapshot）。对于需要人工审批、等待回调或长达数天的长流程，可将当前运行状态序列化保存，待触发后随时恢复运行。\n\n```java\n// 1. 在任务内根据情况停止执行\ncontext.stop();\n\n// 2. 在节点执行停止后，保存状态\nString snapshotJson = context.toJson(); \ndb.save(instanceId, json);\n\n// 3. 经过一段时间后，从中断处恢复（继续执行）\nString snapshotJson = db.get(instanceId);\nFlowContext context = FlowContext.fromJson(snapshotJson);\nflowEngine.eval(graph, context);\n```\n\n### 5、事件广播与回调支持\n\n内置 EventBus，支持组件间的异步解耦或同步调用。\n\n```java\n//发送事件\ncontext.eventBus().send(\"demo.topic\", \"hello\");  //支持泛型（类型按需指定，不指定时为 object）\n\n//调用事件（就是要给答复）\nString rst = context.eventBus().\u003cString, String\u003ecall(\"demo.topic.get\", \"hello\").get();\nSystem.out.println(rst);\n```\n\n\n\n### 6、支持驱动定制（就像 jdbc 的驱动机制）\n\n通过驱动定制，可快速实现：工作流（Workflow）、规则流（RuleFlow）、数据流（DataFlow）及 AI 智能流。\n\n\n## Solon 项目相关代码仓库\n\n\n| 代码仓库                                                                        | 描述                               | \n|-----------------------------------------------------------------------------|----------------------------------| \n| [/opensolon/solon](../../../../opensolon/solon)                             | Solon ,主代码仓库                     | \n| [/opensolon/solon-examples](../../../../opensolon/solon-examples)           | Solon ,官网配套示例代码仓库                |\n|                                                                             |                                  |\n| [/opensolon/solon-expression](../../../../opensolon/solon-expression)       | Solon Expression ,代码仓库           | \n| [/opensolon/solon-flow](../../../../opensolon/solon-flow)                   | Solon Flow ,代码仓库                 | \n| [/opensolon/solon-ai](../../../../opensolon/solon-ai)                       | Solon Ai ,代码仓库                   | \n| [/opensolon/solon-cloud](../../../../opensolon/solon-cloud)                 | Solon Cloud ,代码仓库                | \n| [/opensolon/solon-admin](../../../../opensolon/solon-admin)                 | Solon Admin ,代码仓库                | \n| [/opensolon/solon-integration](../../../../opensolon/solon-integration)     | Solon Integration ,代码仓库          | \n| [/opensolon/solon-java17](../../../../opensolon/solon-java17)               | Solon Java17 ,代码仓库（base java17） | \n| [/opensolon/solon-java25](../../../../opensolon/solon-java25)               | Solon Java25 ,代码仓库（base java25）  | \n|                                                                             |                                  |\n| [/opensolon/solon-gradle-plugin](../../../../opensolon/solon-gradle-plugin) | Solon Gradle ,插件代码仓库             | \n| [/opensolon/solon-idea-plugin](../../../../opensolon/solon-idea-plugin)     | Solon Idea ,插件代码仓库               | \n| [/opensolon/solon-vscode-plugin](../../../../opensolon/solon-vscode-plugin) | Solon VsCode ,插件代码仓库             | \n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopensolon%2Fsolon-flow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopensolon%2Fsolon-flow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopensolon%2Fsolon-flow/lists"}