美文网首页
Laravel database队列使用

Laravel database队列使用

作者: 会飞的兔子zy | 来源:发表于2019-07-15 12:25 被阅读0次

    https://laravelacademy.org/post/19553.html

    1.修改ENV文件 设置队列使用database
    QUEUE_CONNECTION=database
    2.创建队列所需要的数据库表(表的名称是根据config/queue.php文件的设置来的,默认为jobs)
    > php artisan queue:table//生成迁移文件
    > php artisan migrate//执行迁移文件
    3.创建一个队列任务(此例为Sendemail)
    > php artisan make:job Sendemail
    4.定义队列任务(此例我们写入一个Log日志,
    是不是很意外?名字叫sendemail,干的是写入日志的活..)
    //sendemail.php

    public function handle()
        {
            Log::alert('队列测试');
        }
    

    5.控制器中定义一个方法调用队列
    如果在模型中使用需要use Illuminate\Foundation\Bus\DispatchesJobs;
    //controller

    public function queue()
        {
            Sendemail::dispatch();
        }
    

    此时访问这个方法可以在数据表 jobs中看到队列已经创建,此时队列是没有执行的
    6.运行队列监听器执行队列
    > php artisan queue:listen
    此时收到队列执行完成的提示,在App/storage/logs/下面找到今天的日志文件,并查看可以找到下列内容,这就是队列执行的工作
    [2019-07-15 03:09:47] local.ALERT: 队列测试

    失败队列处理

    1.创建失败表的迁移文件和执行迁移文件
    > php artisan queue:failed-table
    > php artisan migrate
    2.我们修改控制器方法人为的制造一个错误
    为队列设置重试次数,这里为3次.
    > php artisan queue:work --tries=3
    也可以在队列文件中定义重试次数[优先级高于命令行]
    public $tries=5;
    //定义队列超时时间,单位为秒.
    public $timeout = 120;
    //队列分类名称
    public $queue='mail';
    执行监听> php artisan queue:listen
    此时执行失败的队列已经自动记录在表failed_jobs里面
    查看失败的队列
    > php artisan queue:failed
    此时会列出失败的队列列表
    重新开始执行队列命令> php artisan queue:retry 1表示重新执行ID为1的队列任务
    如果要执行所有失败的队列> php artisan queue:retry all
    删除失败的队列命令> php artisan queue:forget 1
    删除所有失败队列命令> php artisan queue:flush

    我们可以定义一下队列失败的动作

    //Sendemail.php

    public function failed()
    使用`failed`方法定义队列失败的处理方法,比如发送短信或者邮件给管理员.
        {
            Log::alert('队列失败了,通知一下');
        }
    

    任务类结构队列


    • 这是一种简单的队列用法

    在控制器类名后面加上implements ShouldQueue

    use Illuminate\Contracts\Queue\ShouldQueue;
    
    class TableController extends Controller implements ShouldQueue
    {
    //队列自动重试次数
    public $tries=5;
    //队列分类名称
    public $queue='mail';
    
    public function sendemail()
        {
            $data = ['email' => '66666666@qq.com'];
            Mail::to($data)->queue(new Welcome('管理员'));
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:Laravel database队列使用

          本文链接:https://www.haomeiwen.com/subject/ievgkctx.html