laravel - 队列

一、通过mysql数据库实现队列驱动

1、修改配置文件
.env配置文件修改

# mysql数据库
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=root
# 队列驱动
QUEUE_DRIVER=database

config配置文件修改 queue.php

    'default' => env('QUEUE_CONNECTION', 'database'),

2、为了使用 database 队列驱动,你需要一张数据表来存储任务。运行 queue:table Artisan 命令来创建这张表的迁移文件。当迁移文件创建好后,你就可以使用 migrate 命令来进行迁移。这样会生成两张表 jobs表和failed_jobs表

php artisan queue:table
php artisan migrate

3、创建任务类,监听队列获取数据,处理消息

php artisan make:job SendEmail
goods = $goods;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {

        $goods = $this->goods;

        Log::info(['title' => $goods['title'], 'price' => $goods['price'],'type'=>'数据库']);

    }
}

4、创建控制器,做队列消息推送使用

php artisan make:controller JobProcessController--resource
 rand(1, 1000),
            'title' => $name,
        );

        GoodsInfoToLog::dispatch($data);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

配置路由执行脚本,可看到会生成数据到数据库表jobs中


f312d533d68d1819c1bfeab5345d9c4.png

5、任务执行

php artisan queue:work

也可以通过supervisor守护进程任务进行执行

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /www/wwwroot/html/artisan queue:work

你可能感兴趣的:(laravel - 队列)