ACC WebHook触发Design Automation重复执行的问题排查请求
ACC WebHook触发Design Automation重复执行的原因及解决方案
可能的原因:
- 事件未过滤:代码中注释掉了事件类型判断逻辑,ACC会针对文件版本的多个状态(比如新增、修改)发送事件,不同事件都会触发DA执行。
- 回调响应延迟:WebHook接口中直接
await了Design Automation任务的执行,导致接口无法立即返回200响应。ACC的WebHook服务如果在超时时间内没收到响应,会自动重试发送回调,造成重复触发。 - 无状态校验:没有利用自定义元数据
storm:process-state做重复执行拦截,同一版本即使已经处理过,仍会再次触发DA任务。 - WebHook配置重复:ACC中可能重复订阅了相同的事件规则,导致同一操作触发多次回调。
对应的解决方案:
恢复事件过滤
只处理目标事件类型(比如dm.version.added),避免无关事件触发执行:string eventType = body["eventType"].ToString(); if (eventType != "dm.version.added") return Ok();异步化DA任务执行
不要在WebHook回调中同步等待DA任务完成,改用队列系统(如Hangfire、本地消息队列)将任务入队后立即返回响应,避免ACC重试:// 示例:使用Hangfire将任务入队 BackgroundJob.Enqueue(() => revitDesignAutomate.ExecuteJob(projectId, versionId, modelName, callback)); // 立即返回Ok,无需await增加状态校验
利用自定义元数据判断版本是否已处理,避免重复执行:if (stormProcessState == "processing" || stormProcessState == "completed") { return Ok(); } // 执行DA任务前,先调用ACC API将该版本的storm:process-state更新为processing // 待DA任务完成后再更新为completed检查ACC WebHook配置
登录ACC后台,确认是否存在重复的WebHook订阅,或者事件触发条件设置过于宽泛,调整为精准的触发规则。
内容的提问来源于stack exchange,提问作者chuongmep
相关产品推荐
相关产品推荐

