laravel 小結

隊列

  • 分發任務時報錯
    我的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()】後,再保存到變量裏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章