队列的任务类都默认放在 app/Jobs 目录下
php artisan make:job SendMsg
/**
* 队列测试 分发任务=》生产者 处理任务=》消费者
*/
public function queue(){
$user_id = [1,2,3];
//分发任务队列
GroupFailMsg::dispatch($user_id)
->delay(now()->addSecond(3)) //delay延迟任务分发
->onConnection('redis') //可以指定将任务分发到哪个连接(否则走默认配置)
->onQueue('failMsg'); //指定队列,否则走默认default
dd('队列测试');
}
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
class GroupFailMsg implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* 任务可以尝试的最大次数
* @var int
*/
public $tries = 5; //如果超过最大次数会写入failed_jobs 表中
private $user_id;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($user_id)
{
//
$this->user_id=$user_id;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
var_dump($this->user_id);
// throw new \Exception('失败');
//执行逻辑
Log::info(json_encode($this->user_id));
}
/**
* 任务失败的处理过程
*
* @param Exception $exception
* @return void
*/
public function failed(Exception $exception)
{
var_dump('失败任务'.$this->user_id);
// 给用户发送任务失败的通知,等等……
}
}
Tip:要使 queue:work 进程一直在后台运行,你应该使用进程管理器比如 Supervisor 来确保队列处理器不会停止运行
php artisan queue:work --queue=failMsg //指定队列执行failMsg队列 不加默认走配置default
如果使用 database 队列驱动需要迁移生成jobs和failed_jobs表
php artisan queue:table
php artisan migrate
更多详情:https://learnku.com/docs/laravel/6.x/queues/5168#f7dc2a
最新评论