引入
大家好,我是程序员牛奶,这是我做的一个工作流项目,实际来源于知识星球,我对这个项目做了一些专属的归纳,个人觉得比知识星球他自己的文档好,如果大家需要低成本获取项目可以看看这个项目yo~
该项目是对标Coze/dify的工作流项目,包括自研工作流引擎,节点调度,工具调用的架构设计等等。
你能学到什么
1. DAG 工作流引擎是怎么造出来的
跟着源码走一遍,你会亲手摸到:JSON DSL 怎么解析成内存图、Kahn 算法怎么做环路检测、节点怎么按拓扑顺序递归执行、节点之间的数据怎么通过变量池(VariablePool)传递而不是直接 return。读完再看 Airflow / Temporal / Argo 的设计文档,你会发现"原来都是这一套"。
2. 多线程并行调度(最值钱的一段)
项目里有两个引擎:WorkflowEngine(串行)和 ParallelWorkflowEngine(并行)。两份代码摆在一起,是绝佳的对照学习材料。并行版本里你能看到:
CompletableFuture + AtomicInteger 做"全部任务完成"的等待synchronized(node) 做细粒度锁(不是锁整个引擎)- TTL(TransmittableThreadLocal) 把上下文从主线程透传到线程池
MARK / SKIP 状态机解决条件分支并发难题
如果你面试被问过"ThreadLocal 在线程池失效怎么办""怎么等多个并发任务全部完成"——这套代码就是答案。
3. 设计模式真的落地
NodeExecutor 接口 + 多种实现 = 策略模式;AbstractNodeExecutor 把"输入解析 → 超时控制 → 重试 → 异常分支 → 回调"封装成模板方法;子类只关心 20 行业务逻辑。**加一个新节点 = 写一个类、加一个 @Component**,开闭原则真正能用起来的样子。
4. SSE 实时流式推送(不止于"会用 SseEmitter")
LLM 推 token 的场景一定在你简历里见过,但真要写好得解决:节点跑得快推得慢怎么办(异步缓冲队列)?多节点同时推消息顺序乱怎么办(有序队列)?前端断线怎么办(SseEmitter 超时 + 重连)?Console 中转层怎么转推(OkHttp EventSource)?仓库里有一份《消息回传与实时通信技术文档》专门讲透这套机制。
5. 企业级插件 / 工具网关分层
工作流要调外部 API 时,naive 写法是把 URL 和 API Key 直接塞进节点配置——结果就是凭据泄露 + 强耦合 + 改一个工具炸一片。这套项目用 Tool / Link 双层架构 解决:引擎层只懂 OpenAPI Schema 组装参数,网关层管真实 URL、鉴权、版本。引擎完全不知道第三方真实地址和密钥,新工具往 Link 注册即可热插拔。这就是大厂中台"控制面 vs 数据面"分层的典型实现。
6. Spring AI 多模型统一抽象
DeepSeek、OpenAI、通义千问、讯飞星火,每家 SDK 调用方式都不同。Spring AI 用 ChatClient + ChatModel 抽象层把它们统一成一套 API,切换模型就是改一行配置。这是国内目前能找到的、最完整的 Spring AI 实战样本之一。如果你打算给公司项目接 AI 又不想被某家模型绑死,这套代码就是模板。
7. JDK 21 新特性的实战样本
不是面试八股,是真在项目里用上:虚拟线程跑节点任务、Record 简化 DTO、模式匹配处理状态枚举。如果你还在 JDK 8/11,这套项目能让你直观感受到升级 JDK 21 的收益。
8. 一份完整的全栈项目长什么样
不只是后端。前端用 React 18 + TypeScript + Ant Design 5 + ReactFlow + Vite,工作流编排画布、节点配置面板、SSE 实时监控全实现了一遍。前后端怎么定接口、SSE 怎么对接、ReactFlow 怎么画 DAG——一份能跑的样板代码胜过 10 篇博客。
适合谁
- 想啃 Java 源码、提升中高级水平的同学:DAG 调度 + 并发 + 设计模式三合一
- 准备 AI / Agent / 中台方向面试的求职者:300 道面试题 + 源码对照
- 想给自家项目接 AI 能力:Spring AI 多模型抽象 + SSE 实战模板可以直接抄
- 零基础新手:建议先把 Spring Boot、MyBatis、并发基础打牢,否则会被劝退
如何获取
Github:https://github.com/yangjj-iso/ocrhflow-swu
学习文档(飞书):https://wcnd5gptvpjh.feishu.cn/wiki/FaXXwaDUpi3HO8kbmxLcZFBOnEe?from=from_copylink
如果觉得对你有帮助,点赞 + 转发 就是对我最大的鼓励。有问题、想看某个模块的深度拆解、或者发现 bug,评论区或私信告诉我,我会持续维护这份资料。