创建任务(如果忘了命令命令,用php artisan list先查一下)
php artisan make:job CreateMysql
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
/***
* 写入mysql的任务类
* Class CreateMysql
* @package App\Jobs
*/
class CreateMysql implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $data;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($data)
{
$this->data=$data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//这里处理业务逻辑
echo 'make queue--->';
var_dump($this->data);
}
}
控制器中写入任务队列
<?php
namespace App\Http\Controllers;
use App\Jobs\CreateMysql;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Bus;
class QueueController extends Controller
{
//
public function setQueueTest()
{
// CreateMysql::dispatch('pppppqqqq');
Bus::chain([
new CreateMysql(['0000','bbb','cccc'])
])->catch(function (\Throwable $e){
echo 'job is error:'.$e->getMessage();
})->dispatch();
}
}
执行队列(服务器上需要Supervisor
守护进程或者用nohup)
php artisan queue:work
队列后台运行:
nohup php artisan queue:work > /temp/queue-work.log 2>&1 &
配置 Supervisor
Supervisor 配置文件通常存放在 /etc/supervisor/conf.d
目录,在该目录下,可以创建多个配置文件指示 Supervisor
如何监视进程,例如,让我们创建一个开启并监视 queue:work
进程的 laravel-worker.conf
文件:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/project/artisan queue:work sqs --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log
stopwaitsecs=3600
注:你需要将 /path/to/project
替换成自己项目在服务器的绝对地址。