等待信号 flow.signal
信号节点等待一个具名外部消息,适合同名消息可能多次到达、需要排队,并由业务发送方提供幂等身份的场景。等待声明写入历史后会释放 worker。已经到达且尚未消费的最早匹配信号也可以立即绑定这次等待,保证恢复后仍按接收顺序处理。
等待身份与名称
wait_id 标识一次具体等待,在重放期间保持不变,通常使用图节点 ID。signal_name 来自工作流发布时约定的消息契约,例如订单审批或资料补齐。发送方应提供稳定消息 ID,宿主据此拒绝重复投递。信号载荷必须可序列化,并遵守大小、权限和保留限制。
匹配消息消费后,控制从 received 继续,payload 提供保存的 JSON。下一次等待需要新的稳定等待身份,不能让两个活动节点争用同一个 wait ID。一次性公开接收链接更适合 Hook。信号没有公开 token 语义,通常由受信控制面或业务服务通过鉴权接口发送。
排队与竞争检查
测试应覆盖先发后等、先等后发、多个同名消息、重复消息 ID、不同名称、取消与接收竞争、进程恢复和载荷超限。操作者需要看到等待名称、到达时间和消费状态,但日志要隐藏敏感载荷。信号未消费时,续段操作会被拒绝,因此长期循环要明确每条消息在哪个历史段被处理。
用它等待一个具名外部消息。适合同名消息会多次到达、需要排队,并由业务发送方提供幂等身份的场景。
运行方式
等待声明提交后释放 worker。最早到达且尚未消费的同名信号会绑定 wait_id,随后开放 received 与 payload。
节点契约
- 类型
flow.signal- 角色
- 持久运行命令
- 运行绑定
wait_for_signal- 持久身份
- 图节点 ID
配置属性
| 属性 | 类型与控件 | 默认值 | 规则 |
|---|---|---|---|
wait_id等待标识 | strStrInput | signal | 在当前运行中保持唯一。恢复或重试时请勿修改。必填 |
signal_name信号名称 | strStrInput | workflow.signal | 必须与发送方使用的信号名称完全一致。必填 |
端口
| 方向 | 端口 ID | 种类 | 数据类型 |
|---|---|---|---|
| 输入 | in进入 | control | FlowControl |
| 输出 | received收到信号 | control | FlowControl |
| 输出 | payload信号内容 | data | JsonValue |
节点 JSON 示例
CLI 会用 manifest 默认值生成同样的节点结构。画布位置、标题和选中状态属于展示数据。
CLI 用法
先查看当前安装版本的 manifest,再创建节点并验证完整工作流。所有命令输出 JSON。
Skill 用法
安装包内附带 a3s-flow Skill。它会先查询 CLI 的节点清单,再创建、校验、编译并计算语义摘要。
使用注意
- wait_id 在一次等待中保持稳定。
- signal_name 应来自发布时声明的信号契约。
- 一次性公开 token 回调更适合 Hook。
