laravel 小结

本文探讨了一个关于Laravel框架中队列任务序列化的问题。具体表现为在使用自定义Job时,因不当传递请求对象而导致的任务序列化失败。文章详细记录了错误发生的原因及解决方法,强调了正确传递参数的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

队列
  • 分发任务时报错
    我的JOB:
<?php

namespace App\Jobs;

use Illuminate\Support\Carbon;
use Illuminate\Http\Request;
use App\Models\PosDeviceIn;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

/**
 *
 * 任务分发格式 :PosDeviceInJob::dispatch(Request)->onQueue('batchdevicein');
 */
class PosDeviceInJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable;//, SerializesModels;

    ## 任务最大尝试次数。
    public $tries = 5;

    ## 任务运行的超时时间。
    public $timeout = 120;

    protected $request;

    /**
     * Create a new job instance.
     *
     * @param [obj] $[request] 
     * 
     * @return void
     */
    public function __construct(Request $request)
    {
        $this->request = $request;
        // $this->request = [
        //     'tusn_start' => $request->tusn_start,
        //     'tusn_end'   => $request->tusn_end,
        // ];
    }
    ……
    ……
    如上,我没有传Model,我传了请求类。

报错:


exception: "Exception"
file: "/www/web/laravel/datang/vendor/laravel/framework/src/Illuminate/Queue/Queue.php" line 128
message: "Serialization of 'Closure' is not allowed"

解决:JOB的构造函数里,不要存储任何未序列化的对象(当然model除外)。可以存储一些数组或字符串之类的,如上的注释掉的代码。

要不,你自己把自己传的对象给序列化了 【serialize()】后,再保存到变量里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值