You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将文件内容发送至RabbitMQ队列无数据无报错,求指导

问题排查与修复方案

1. 先确认队列进程是否监听了指定队列

你用了service-call专属队列,但如果启动队列时没指定这个队列,任务会一直堆积在队列里不会执行。启动队列必须带上队列名:

php artisan queue:work --queue=service-call

要是需要同时处理多个队列,可以指定优先级:

php artisan queue:work --queue=service-call,default

2. 修复队列任务的数据获取逻辑

用pushRaw发送的原始JSON,任务类里不能直接通过$this->data->file访问,得先手动解析:

public function handle(){
    try {
        // 把原始JSON解析为数组
        $payload = json_decode($this->data, true);
        if (!$payload || !isset($payload['file'])) {
            Log::error('队列数据格式错误,缺少file字段');
            return;
        }
        $file = $payload['file'];
        
        // 后续存储逻辑...
    } catch (\Throwable $e) {
        Log::error('队列处理失败: ' . $e->getMessage(), ['完整堆栈' => $e->getTraceAsString()]);
    }
}

pushRaw传递的内容会直接存在任务的data属性里,必须手动解析才能拿到具体字段。

3. 补上未定义变量与存储配置

  • $fileToPath完全没定义,得指定具体的存储路径,比如生成唯一文件名避免覆盖:
    $fileToPath = 'uploads/documents/' . uniqid() . '.pdf';
    
  • Storage::disk()没指定磁盘,默认用local磁盘,建议明确指定(比如public),同时确保config/filesystems.php里的磁盘配置正确:
    Storage::disk('public')->put($fileToPath, $file, 'public');
    

4. 解决二进制数据的JSON编码问题

直接把file_get_contents拿到的二进制内容(比如PDF、图片)json_encode很可能编码失败,建议转成Base64再发送:

// 发送队列前处理
$documentToSend = ['file' => base64_encode(file_get_contents($filePath))];
Queue::pushRaw(json_encode($documentToSend), 'service-call');

// 队列处理时解码
$file = base64_decode($payload['file']);

5. 完善异常捕获范围

原来的catch (Exception $e)只能捕获普通异常,抓不到致命错误(比如语法错误、内存溢出),改成catch (\Throwable $e)才能覆盖所有错误类型,同时记录完整堆栈信息方便排查:

catch (\Throwable $e) {
    Log::error('队列处理异常', [
        '错误信息' => $e->getMessage(),
        '错误文件' => $e->getFile(),
        '错误行号' => $e->getLine(),
        '堆栈追踪' => $e->getTraceAsString()
    ]);
}

6. 验证任务是否真的进入队列

如果用的是database队列驱动,可以直接查jobs表看任务是否存在;如果是redis,可以用Redis客户端查看队列键值。要是用sync驱动,任务会同步执行,可以直接在本地调试代码逻辑。

内容的提问来源于stack exchange,提问作者Payal Desai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 02:30:55