1. laravel任务队列使用

1.1. 创建任务队列处理的方法

#php artisan make:job ClassName --queued

#该命令将会在app/Jobs目录下生成一个新的类,并且该类实现了Illuminate\Contracts\Queue\ShouldQueue接口,告诉Laravel该任务应该被推送到队列而不是同步运行。
<?php

namespace App\Jobs;

use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Bus\SelfHandling;
use Illuminate\Contracts\Queue\ShouldQueue;

class ClassName extends Job implements SelfHandling, ShouldQueue
{
    use InteractsWithQueue, SerializesModels;

    private $Data;

    public function __construct($data)
    {
        $this->Data = $data;
    }

    /**
     * 执行任务
     * @return void
     */
    public function handle()
    {
            dump($this->Data);
    }
}

1.2. 在控制器中推送任务到指定队列

    #$this->dispatch() 默认继承了App\Http\Controllers\Controller 都可以使用
        $AsynData = [1,2,3];
        $job = (new JobsName($AsynData))->onQueue('listen_asyn');
        try{
            $this->dispatch($job);
        }catch (\Exception $e){
            dump($e);
        }

1.3. Command 中使用 use DispatchesJobs;

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Foundation\Bus\DispatchesJobs;

class CommandName extends Command
{
    use DispatchesJobs;

    protected $signature = 'test:one';

    protected $description = 'desc';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        $AsynData = [4,5,6];
        $job = (new JobsName($AsynData))->onQueue('listen_asyn');
        try{
            $this->dispatch($job);
        }catch (\Exception $e){
            dump($e);
        }
    }

1.4. 队列监听指定队列

php artisan queue:work --queue=listen_asyn --daemon

php artisan queue:work --queue=listen_asyn --daemon
# 可以开启多个

results matching ""

    No results matching ""