导语:自动发布最令人头疼的问题之一,是任务超时后不知道到底有没有成功。此时直接重试,可能产生重复文章、重复标签关系或重复图片。解决这类问题的核心不是“少重试”,而是让重复请求得到同一个结果。

什么是自动发布的幂等性
幂等性指同一个业务请求执行一次或多次,最终结果应该一致。对于文章发布,可以把任务ID作为业务唯一标识;如果同一个任务已经发布成功,再次请求时返回原文章ID,而不是再创建一篇。
幂等键不能只使用当前时间,因为重试时时间会变化。更适合的组成是计划日期、选题标识和生成批次,例如“20260817-ai-agent-memory-v1”。
标题去重还不够
只检查标题会漏掉“换个标点但正文相同”的情况。发布前可以同时计算规范化标题指纹和正文指纹:去除多余空白、统一大小写、删除不影响语义的HTML属性后再计算哈希。
$fingerprint = hash('sha256', $normalizedTitle . "n" . $normalizedContent);
标题指纹适合拦截明显重复,正文指纹适合处理标题改写。两种指纹都应该保留在任务记录中。
用状态机记录发布过程
建议把任务状态拆成待生成、已生成、图片上传中、待发布、发布成功、发布失败和需要人工确认。状态更新要有时间、错误信息和请求次数,不能只保存一个布尔值。
- 生成成功但图片失败:允许从图片阶段继续;
- 图片成功但发布超时:先查询幂等键,再决定是否重试;
- 返回参数异常:进入人工确认,不要无限重试。
图片上传也需要幂等处理
同一张图片重复上传会产生多个OSS对象。可以使用图片二进制的SHA-256作为文件指纹,或者在对象键中加入内容哈希。更新文章时,正文只写最终OSS地址,避免重复转存同一个远程地址。
重试策略怎么设置
网络超时、临时5xx和限流错误可以重试;参数错误、签名错误、权限错误和内容违规不应该自动重试。重试需要指数退避和上限,并且每次重试都记录原因。
总结
自动发布的可靠性来自幂等键、内容指纹和状态机,而不是简单增加重试次数。先确认请求是否执行过,再决定继续、恢复或人工处理,才能避免重复文章和重复图片。
评论 0