一批1000个商品更新后,部分Complete、部分Rejected。如果原样重发全部请求,成功项会再次执行,可能重复写媒体、库存或外部流水。
按顺序解决
- 保存接口返回的bulk_uuid,并调用Bulk Status接口取得每个operation_key、status、result_message和serialized_data。先按错误类型分组。
- 401、字段校验、SKU不存在等确定性错误先修数据;队列连接中断、死锁、临时超时才适合自动重试。不要把所有Rejected都当成瞬时故障。
- 从原始业务数据按operation_key重建只包含失败项的新批次,不要直接执行数据库里的serialized_data。为每条业务操作保留外部幂等键,成功项不得重复创建资源。
- 确认async.operations.all消费者正在运行;提交新批次后分别记录旧、新bulk_uuid,直到所有操作进入最终状态。
检查命令
bin/magento queue:consumers:list | grep async.operations.all
bin/magento queue:consumers:start async.operations.all --max-messages=500
curl -H 'Authorization: Bearer ***' 'https://shop.example/rest/V1/bulk/BULK_UUID/status'验证结果
构造一条合法、一条字段错误和一条临时失败数据;修复后只重试后两条中的可重试项,已成功记录的updated_at和关联数据不应再次变化。
注意:生产脚本应设置最大重试次数和死信报告,避免毒消息无限循环。

