使用database驱动做队列

下面是简单使用教程

1. 修改.env文件配置

QUEUE_CONNECTION=sync改成QUEUE_CONNECTION=database

默认的sync是同步队列

2. 添加消息队列的mysql表

php artisan queue:table
php artisan migrate

3. 创建任务类

php artisan make:job WangZhaoBo

然后生成该路径文件\app\Jobs\WangZhaoBo.php

打开改文件,复制下面的代码覆盖掉生成代码

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable; class WangZhaoBo implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $name; // //这里可以声明最大尝试次数
// public $trie = 3; // //优先执行service队列
// php artisan queue:work --queue=service,default --tries=3
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($name)
{
$this->name = $name;
//
} /**
* Execute the job.
*
* @return void
*/
public function handle()
{
sleep(2);
$res = file_put_contents('abcdef.log',$this->name.date('Y-m-d H:i:s').PHP_EOL,FILE_APPEND);
// if ($res===false) {
// // 延迟 10s 后推送,默认是 0,表示立即推送
// $this->release(10);
//你可以可以根据已执行次数依次递增延迟时间:
// $this->release(10 * $this->attempts());
// }
} //failed_jobs
// 任务执行失败后发送邮件通知给相关人员
public function failed(\Exception $exception){
Mail::to($this->service->developer->email)->send('...');
}
}

4. 运行消息队列

php artisan queue:work

5. 调用消息队列

这两个方法返回值不同,可方法一返回的是mysql表的id.方法二是返回队列的对象.可以自己打印一下看看

delay(10)是延迟10秒执行

//方法一
$this->dispatch((new WangZhaoBo('王召波'))->delay(10));
//方法二
WangZhaoBo::dispatch('王召波')->delay(10);

把上面的方法放到控制器里面,然后访问一下.

你会看到命令窗口显示

[2021-01-28 13:59:42][333] Processing: App\Jobs\WangZhaoBo
[2021-01-28 13:59:42][333] Processed: App\Jobs\WangZhaoBo

然后你在项目根目录会生成一个abcdef.log文件

注意事项

  1. 因为队列是常驻进程,所以队列类WangZhaoBo内容修改的时候,需要重新启动队列才能生效

    在window使用cmd窗口运行队列之后,再使用restart之后,之前队列会自动断掉.
>php artisan queue:restart
>php artisan queue:work
  1. 如果你的队列类报错了,队列一直执行,表中的attempts字段到255之后.

    队列就不执行了,这个时候把255改成0再去执行队列

参考:

https://learnku.com/docs/laravel/5.7/queues/2286#connections-vs-queues

https://blog.csdn.net/qq_39173140/article/details/98491547

https://blog.csdn.net/chen529834149/article/details/76918406/

https://wiki.jikexueyuan.com/project/laravel-5.1/queue.html

最新文章

  1. mui scroll和上拉加载/下拉刷新
  2. .net4.0及Silverlight_Tools for vs2008sp1安装失败解决办法
  3. hadoop 突然断电数据丢失问题
  4. SQL触发器、事务
  5. Hash(哈希)
  6. WinForm的延时加载控件概述
  7. DNS (二)协议
  8. BZOJ 3929 Circle of digits 解题报告
  9. bzoj 2618 2618: [Cqoi2006]凸多边形(半平面交)
  10. SQL语法集锦三:合并列值与分拆列值
  11. Markdown写接口文档,自动添加TOC
  12. React入门---组件嵌套-5
  13. python bif
  14. js 取消事件冒泡
  15. Git 分支合并:合并某次提交
  16. C++:重载全局new/delete实现跨平台多线程内存检测
  17. 使用adb安装遇到的一些坑
  18. CTF PHP文件包含--session
  19. Redis缓存雪崩、缓存穿透、热点Key解决方案和分析
  20. VS2015开发环境的安装和配置 2016-07-03更新

热门文章

  1. Java中class的前面添加public和不添加public有什么区别?
  2. 入门 - 复习Kubernetes核心概念 (八)
  3. 解决手机unauthorized错误
  4. Ubuntu 18.04 修改默认源为国内源
  5. Firewalld防火墙——基础认知
  6. SSH 远程访问及控制 ( 早上好,我是派大星,上帝派来爱你的那颗星)
  7. 交换机基本原理与VRP基础及操作
  8. Elementui【tooltip】 在弹框关闭之后再次‘出现’的问题
  9. 【Gym100837F】Controlled Tournament(状压Dp 搜索剪枝)
  10. 对已有的docker容器增加新的端口映射