🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
配置文件config/queue.php ~~~ Supported: "null", "sync", "database", "beanstalkd", "sqs", "redis" //sync同步驱动 ~~~ `'default' => env('QUEUE_DRIVER', 'sync'),//默认同步驱动` ~~~ Queue Connections //队列的配置 Failed Queue Jobs //失败的队列配置 ~~~ 在.env文件中驱动改为数据库驱动 ~~~ QUEUE_DRIVER=database ~~~ 然后在命令行中 ~~~ php artisan queue:table ~~~ 迁移文件生成成功,然后执行迁移 ~~~ >database >migrations xx时间xxx.php //在命令行中 php artisan migrate ~~~ 创建一个任务类,名字叫SendEmail ~~~ php artisan make:job SendEmail ~~~ 可以看到对应文件夹下多出这些文件 ~~~ >blog >app >Jobs SendEmail.php ~~~ 然后在SendEmail.php文件下写对应的代码,写个发邮件的测试下 ~~~ class SendEmail implements ShouldQueue { use InteractsWithQueue, Queueable,SerializesModels; protected $email; public function __construct($email) { $this->email=$email; } public function handle() { //use Mail; Mail::raw('队列测试',function($message){ $message->to($this->eamil); //发送给谁 }); } } ~~~ 然后可以在我们控制器方法中使用队列了 ~~~ public function queue() { //use App\Jobs\SendEmail; dispatch(new SendEmail('825455423@qq.com')); //在对应的队列中创建成功 } ~~~ 为什么能直接使用dispatch,因为在控制器继承的controller这个基类已经实现了这个dispatch ~~~ class Controller extends BaseController { use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests; } ~~~ 如果在模型中要自己手动use,然后运行对应控制器下面方法,可以看到数据库有队列的记录的 然后执行这个队列监听器,有队列进来就执行 ~~~ php artisan queue:listen ~~~ 处理失败队列 如果队列执行失败会把记录放到一个失败的表里面去,迁移创建一个表 建立失败的表的迁移文件 ~~~ php artisan queue:failed-table ~~~ 创建成功现在开始生成表 ~~~ php artisan migrate ~~~ 迁移成功,失败会放到failed_jobs这个表中 如果有很多失败的记录想重新执行,首先查看错误的记录 ~~~ php artisan queue:failed ~~~ ~~~ //把id为1的失败队列那条执行下 php artisan queue:retry 1 //执行所有失败的 php artisan queue:retry all ~~~ ~~~ //删除id4的失败队列记录 php artisan queue:forget 4 //全部清除失败的队列记录 php artisan queue:flush ~~~