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