news 2026/11/3 15:30:36

saga json文件阅读

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
saga json文件阅读

先明确核心目标

我们要找的是:开卡(openCard)执行失败后,怎么触发「补偿 - 注册失败(logoutState)」

第一步:定位「开卡」这个业务节点(正向执行的核心)

先在 JSON 的nodes数组里找到开卡节点,确认它的基本信息:

json

{ "type": "node", "label": "开卡", // 节点名称:开卡 "stateId": "openCard", // 节点ID:openCard "stateType": "ServiceTask", // 类型:业务任务(正向执行) "id": "d20de769", // 唯一标识:d20de769(重点记这个ID) "stateProps": { "ServiceMethod": "openCard" // 正向执行的方法:openCard() } }

👉 关键信息:开卡节点的唯一 ID 是d20de769,执行的正向方法是openCard()。

第二步:定位「补偿 - 注册失败」这个补偿节点(要执行的回滚方法)

在nodes数组里找「补偿节点」(特征:stateType="Compensation"):

json

{ "type": "node", "label": "补偿-注册失败", // 节点名称:补偿-注册失败 "stateId": "logoutState", // 节点ID:logoutState "stateType": "Compensation", // 类型:补偿节点(核心标识) "id": "ebae97fa", // 唯一标识:ebae97fa(重点记) "stateProps": { "ServiceMethod": "logoutState"// 补偿要执行的方法:logoutState() } }

👉 关键信息:补偿节点 ID 是ebae97fa,回滚方法是logoutState()。

第三步:找「开卡→补偿 - 注册失败」的绑定关系(JSON 里的 “契约”)

在edges数组里找「补偿类型连线」(特征:style.type="Compensation"):

json

{ "source": "d20de769", // 来源:开卡节点的ID(d20de769) "target": "ebae97fa", // 目标:补偿节点的ID(ebae97fa) "style": { "type": "Compensation", // 连线类型:补偿(核心) "lineDash": "4" // 虚线(视觉上的补偿连线) }, "id": "7976c7cb" }

👉 这行配置的意思:开卡节点(d20de769)绑定了补偿节点(ebae97fa),开卡失败就执行这个补偿方法。

第四步:找「开卡失败触发补偿」的条件(什么时候执行补偿)

在edges数组里找「指向补偿触发器」的连线(补偿触发器 ID:581ec6d9):

1. 先定位补偿触发器节点

json

{ "type": "node", "label": "补偿触发器", "stateType": "CompensationTrigger", "id": "581ec6d9" // 补偿触发器ID:581ec6d9(重点记) }
2. 找开卡失败触发补偿的连线

json

{ "source": "f700c1bd", // 来源:开卡后的「是否成功?」判断节点 "target": "581ec6d9", // 目标:补偿触发器(581ec6d9) "stateProps": { "Expression": "[resp]==false" // 触发条件:开卡返回false }, "label": "fail", // 标签:失败 "id": "72cebcc7" }

👉 这行配置的意思:开卡执行后,「是否成功?」判断节点如果发现返回值是 false,就走到补偿触发器。

第五步:完整执行链路(开卡失败→触发补偿)

把上面的配置串起来,就是一个完整的补偿场景:

plaintext

1. 正向执行:状态机执行开卡节点(d20de769)→ 调用openCard()方法 → 返回false; 2. 失败判断:走到「是否成功?」节点(f700c1bd)→ 触发条件[resp]==false成立; 3. 触发补偿:从判断节点走到补偿触发器(581ec6d9); 4. 执行补偿:框架根据绑定关系(d20de769→ebae97fa)→ 调用补偿方法logoutState(); 5. 补偿结束:执行完补偿后,走到Fail节点(c8c17df3),流程结束。

再举一个「注册抛异常触发补偿」的简化例子(帮你巩固)

1. 注册节点 ID:093de4fc,补偿节点 ID:4ad8f51a(补偿 - 销卡);
2. 绑定连线:

json

{ "source": "093de4fc", // 注册节点ID "target": "4ad8f51a", // 补偿-销卡ID "style": {"type":"Compensation"} }
3. 异常触发补偿的连线:

json

{ "source": "d526ca8b", // 注册异常的Catch节点 "target": "581ec6d9", // 补偿触发器 "stateProps": { "Exceptions": ["java.lang.Throwable"] // 捕获所有异常 } }

👉 逻辑:注册抛异常→Catch 节点捕获→走到补偿触发器→执行补偿 - 销卡(logoutCard ())→ 再执行补偿 - 注册失败(logoutState ())。

总结

看 JSON 里的补偿,核心就是抓 3 个关键 ID 的关联:

  1. 业务节点 ID(比如开卡 d20de769)→ 知道正向执行什么;
  2. 补偿节点 ID(比如 logoutStateebae97fa)→ 知道回滚执行什么;
  3. 补偿触发器 ID(581ec6d9)→ 知道什么条件触发补偿;
  4. 再通过edges里的连线,把这 3 个 ID 串起来,就是完整的补偿逻辑。

简单记:找 Compensation 类型节点(补偿方法)→ 找 Compensation 类型连线(绑定关系)→ 找指向补偿触发器的连线(触发条件)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 7:47:04

微PE官网启动盘能否跑GLM-4.6V-Flash-WEB?条件有限慎尝试

微PE启动盘能跑GLM-4.6V-Flash-WEB吗?别试了,这条路走不通 你有没有想过,把一个最新的多模态大模型塞进U盘,在任何电脑上插进去就能运行?听起来像是“即插即用AI”的终极梦想。尤其是当你手头只有一台老旧机器、或者只…

作者头像 李华
网站建设 2026/11/2 21:28:50

PyCharm断点调试GLM-4.6V-Flash-WEB Python脚本

PyCharm断点调试GLM-4.6V-Flash-WEB Python脚本 在构建智能图文理解系统时,开发者常常面临一个尴尬的现实:模型看似运行正常,但输出结果却“答非所问”——比如上传一张猫的图片,提问“图中动物是什么?”,模…

作者头像 李华
网站建设 2026/11/3 8:17:08

Dify API调用全链路监控方案,快速定位生产环境问题

第一章:Dify API调用全链路监控概述在构建基于 Dify 的 AI 应用时,API 调用的稳定性与性能直接影响用户体验。全链路监控旨在追踪从客户端发起请求到 Dify 平台处理并返回结果的完整路径,涵盖网络延迟、响应状态、上下文传递及错误溯源等关键…

作者头像 李华
网站建设 2026/11/2 2:36:30

sward快速上手指南 - 如何做好文档评审

知识库不是文件的堆积,而是组织的核心资产。不仅要避免因为文档错误而导致项目出现问题,还要减少后续的维护成本,让知识库真正成为团队资产而不是负担。文档评审是守护这份资产质量的“守门员”。1、开启评审创建知识库时(以公共知…

作者头像 李华
网站建设 2026/11/2 22:04:58

浙大开源3B模型碾压GPT-4o,小白也能开发的GUI交互神器来了!

随着多模态大语言模型(MLLM)的飞速发展,能够像人类一样通过视觉输入操作图形用户界面(GUI)的智能体(Agent)正逐渐成为现实。然而,在通往通用计算机控制的道路上,如何让模…

作者头像 李华
网站建设 2026/11/2 2:58:36

如何快速上手Monaspace字体:开发者的完整配置指南

如何快速上手Monaspace字体:开发者的完整配置指南 【免费下载链接】monaspace An innovative superfamily of fonts for code 项目地址: https://gitcode.com/gh_mirrors/mo/monaspace Monaspace是一款创新的代码字体超级家族,专为编程和开发工作…

作者头像 李华