pub struct SagaCommandEnvelope {Show 13 fields
pub saga_id: String,
pub tenant_id: String,
pub workflow: String,
pub definition_version: u32,
pub definition_digest: String,
pub step: String,
pub phase: String,
pub attempt: u32,
pub effect_id: String,
pub command_id: String,
pub recovery_operation_id: Option<String>,
pub payload: Option<Value>,
pub raw_payload: Option<SagaPayload>,
}Expand description
业务作用:Orchestrator 发往参与方的 execute/cancel/compensate/resolve 命令 envelope。
字段说明:payload 只在首步 execute 由启动请求携带;其余命令只携带 Saga 与 step
身份,参与方按 saga_id + step 从本地事实解析业务输入,天然避免敏感载荷跨服务复制。
Fields§
§saga_id: String实例身份。
tenant_id: String规范化租户;无租户部署为固定 system tenant。
workflow: Stringworkflow 名称。
definition_version: u32实例固定的 definition 版本。
definition_digest: String实例固定的 definition 摘要。
step: String步骤名称。
phase: String执行阶段稳定名(execute/cancel/compensate/resolve)。
attempt: u32尝试序号。
effect_id: String跨 attempt 稳定的业务效果身份。
command_id: String本次尝试的命令身份;同一 attempt 传输重投复用。
recovery_operation_id: Option<String>仅由已审计管理操作签发的恢复身份;普通自动命令必须为空。
Participant 只允许携带该字段的新命令重新打开 HALTED 查询或补偿 gate;因此
自动 timeout/new attempt 不能解除人工冻结。旧格式 envelope 缺字段时按 None
解码,支持滚动升级期间继续消费已发布消息。
payload: Option<Value>首步 execute 的业务输入;其余命令为空。
raw_payload: Option<SagaPayload>原始业务正文;与兼容 JSON payload 互斥,字节与 schema 在重投中保持不变。
Implementations§
Source§impl SagaCommandEnvelope
impl SagaCommandEnvelope
Sourcepub fn business_payload(&self) -> Result<Option<SagaPayload>>
pub fn business_payload(&self) -> Result<Option<SagaPayload>>
业务作用:合并兼容 JSON 与原始字节入口为唯一正文合同,拒绝双重正文来源。
参数说明: 无。
返回:原始正文或规范 JSON 字节;重复来源与非法正文返回类型化合同拒绝。
Sourcepub fn verify_payload_contract(
&self,
content_type: &str,
schema_id: &str,
) -> Result<()>
pub fn verify_payload_contract( &self, content_type: &str, schema_id: &str, ) -> Result<()>
业务作用:在 Inbox 和业务解码前按本地 handler 声明复验媒体与 schema。
参数说明:content_type 与 schema_id 来自编译期 descriptor,不来自请求 header。
返回:无正文或合同完全一致时成功;任一漂移返回确定性合同拒绝。
Sourcepub fn decode_payload<T: DeserializeOwned>(&self) -> Result<T>
pub fn decode_payload<T: DeserializeOwned>(&self) -> Result<T>
业务作用:把已验证的正文转换为 handler 的类型化输入,二进制合同交付字节数组。
参数说明: 无。
返回:JSON 按原始文本直接解码,二进制保留全部字节;类型不匹配时返回合同拒绝。
Sourcepub fn verified(&self) -> Result<VerifiedIdentity>
pub fn verified(&self) -> Result<VerifiedIdentity>
业务作用:解析并复验命令 envelope 的身份字段。
参数说明: 无。
返回:复验通过返回已证身份;否则返回错误,调用方走隔离路径而不是业务路径。
Sourcepub fn verified_for_delivery(&self) -> Result<VerifiedIdentity>
pub fn verified_for_delivery(&self) -> Result<VerifiedIdentity>
业务作用:在 Kafka 投递边界把命令身份错误转换成封闭分类。
参数说明: 无。
返回:身份合法时返回已证身份;否则只返回稳定的类型化分类,使 transport 不解析 可能包含不可信字段的错误文本,也不让非法命令占用 Participant Inbox。
Sourcepub fn to_outbox_event(&self) -> Result<OutboxEvent>
pub fn to_outbox_event(&self) -> Result<OutboxEvent>
业务作用:把命令 envelope 序列化为 Outbox 事件,与触发它的状态迁移同事务发布。
event_id 直接使用 command_id:同一 attempt 的传输重投必须复用同一投递身份,
dispatcher 重发不会产生新的去重身份。
参数说明: 无。
返回:可交给 naoutbox 的事件;序列化失败返回错误。