Shopware 6.4.10.1 XML导出未完成卡在.xml.partial问题咨询
Shopware 6.4.10.1 产品XML导出卡在
.xml.partial阶段修复方案 问题根因
这个问题是Shopware 6.4.x版本导出模块的设计逻辑叠加队列运行异常导致的,和使用默认导出模板没有关系:
- 后台触发导出后,系统只会通过消息队列逐批把产品数据写入
.xml.partial临时文件,这个阶段不会写入XML声明头、根节点闭合尾标签,所以文件本身就是残缺状态 - 导出文件的定稿逻辑(补全头部、追加尾部标签、把
.xml.partial重命名为正式.xml文件)只绑定在导出路由的响应结束事件上:只有当请求完整拉取完导出接口的全部内容时,才会触发最终的文件生成回调。后台跑的队列任务本身不会触发这个逻辑,这就是为什么手动访问导出URL、用wget拉取文件的瞬间,文件就会完成生成。
修复步骤
- 第一步:先解决队列消费异常问题
后台导出一直卡partial阶段,最常见的原因是队列消费中断,所有产品条目没写完:- 先手动跑一次队列消费,清掉积压的导出任务:
bin/console messenger:consume admin_worker default --time-limit=300 --memory-limit=2G - 生产环境不要依赖后台自带的JS admin worker消费队列——这个worker只有你打开后台页面时才会运行,浏览器切后台、页面休眠、设备锁屏都会导致消费中断。必须配置Supervisor托管队列消费进程,或者配置crontab定时执行消费命令,保证导出任务能把所有产品数据写完到partial文件。
- 先手动跑一次队列消费,清掉积压的导出任务:
- 第二步:配置自动触发定稿逻辑
如果需要后台点导出后自动生成完整文件,不需要手动访问URL触发,选一个方案落地即可:- 加定时任务检测触发:每10分钟扫描一次导出存储目录,对超过5分钟没有写入变化的
.xml.partial文件,对应拉取一次它的导出URL触发定稿,参考命令:# 替换成你自己店铺的导出URL,输出丢到空设备不占存储 wget -q -O /dev/null "https://你的店铺域名/export/对应导出标识.xml" - 代码补丁修正:针对6.4.10.1版本,可以在导出队列的最后一批条目消费完成后,手动调用
ImportExportFileService的finalize方法直接完成文件定稿,绕开必须HTTP请求触发的限制。
- 加定时任务检测触发:每10分钟扫描一次导出存储目录,对超过5分钟没有写入变化的
- 第三步:验证修复
- 删掉之前残留的无效
.xml.partial文件,重新触发一次导出 - 等队列消费完成,观察partial文件大小不再变动
- 触发一次定稿请求,检查生成的正式XML文件包含
<?xml version="1.0"?>头部和对应的根节点闭合标签,产品条目完整即可。
- 删掉之前残留的无效
避坑提示
- 如果你用了CDN、反向代理,要给导出路径配置不缓存规则——如果代理只拉取了部分响应就断开连接,会导致定稿逻辑触发失败
- 6.4.11.0及之后的小版本官方已经调整了这个逻辑,队列消费完成后会自动发本地请求触发文件定稿,条件允许的话升级小版本也可以直接解决问题。
内容的提问来源于stack exchange,提问作者Yutani
相关产品推荐
相关产品推荐

