使用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

Laravel消息队列怎么使用的更多相关文章

  1. Lumen开发:结合Redis实现消息队列(3)

    4.运行队列监听器 开启任务监听器 Lumen包含了一个Artisan命令用来运行推送到队列的新任务.你可以使用queue:listen命令运行监听器: php artisan queue:liste ...

  2. laravel的延迟消息队列

    laravel的延迟消息队列 这篇来自于看到朋友转的58沈剑的一篇文章:1分钟实现"延迟消息"功能(http://mp.weixin.qq.com/s?__biz=MjM5ODYx ...

  3. laravel的消息队列剖析

    laravel的消息队列剖析 这篇来自于看到朋友转的58沈剑的一篇文章:1分钟实现"延迟消息"功能 在实际工作中也不止遇见过一次这个问题,我在想着以前是怎么处理的呢?我记得当初在上 ...

  4. php laravel v5.1 消息队列

    * install https://laravel.com/docs/5.1#installationcomposer create-project laravel/laravel msgq &quo ...

  5. redis实现消息队列

    业务需求 本文是以laravel框架来介绍redis队列,具体用法你可以参考http://www.cnblogs.com/lengthuo/p/7277260.html最近接受一个很简单的东西,(说起 ...

  6. 消息队列Queue大全

    消息队列Queue大全 (http://queues.io/) 作业队列,消息队列和其他队列.几乎所有你能想到的都在这. 关于 那里有很多排队系统.他们每个人都不同,是为解决某些问题而创建的.这个页面 ...

  7. php和redis怎么实现消息队列

    把瞬间服务器的请求处理换成异步处理,缓解服务器的压力,实现数据顺序排列获取.本文主要和大家分享php和redis如何实现消息队列,希望能帮助到大家. redis实现消息队列步骤如下: 1).redis ...

  8. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  9. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

随机推荐

  1. vivo 评论中台的流量及数据隔离实践

    一.背景 vivo评论中台通过提供评论发表.点赞.举报.自定义评论排序等通用能力,帮助前台业务快速搭建评论功能并提供评论运营能力,避免了前台业务的重复建设和数据孤岛问题.目前已有vivo短视频.viv ...

  2. JVM垃圾收集器(八)

    一.垃圾收集器 有了前面JVM参数的了解下面来看下JVM的垃圾收集器:如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.  JVM(HotSpot)有7种垃圾收集器,7种垃圾收集 ...

  3. Argo 安装和 workflow 实例配置文件解析

    一.Argo 安装配置 1.1 Argo 安装 $ kubectl create ns argo $ kubectl apply -n argo -f https://raw.githubuserco ...

  4. Java数组3种创建方式

    public static void main(String[] args){ /** * 1. 固定大小的空数组, 动态创建 */ String[] strArr1 = new String[3]; ...

  5. 微服务技术栈简单介绍,Eureka和Ribbon的引入和使用

    一.了解微服务架构 1.微服务技术栈 整体框架 整体学习规划路线2.微服务与单体架构的区别 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署 优势 结构简单 部署成本低 缺点 耦合度高, ...

  6. docker错误处理——docker Job for docker.service failed because the control process exited with error code.

    (15条消息) docker Job for docker.service failed because the control process exited with error code._Hel ...

  7. 取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

    作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper. Mybatis Generator 是 ...

  8. 流量录制与回放在vivo的落地实践

    一.为什么要使用流量录制与回放? 1.1 vivo业务状况 近几年,vivo互联网领域处于高速发展状态,同时由于vivo手机出货量一直在国内名列前茅,经过多年积累,用户规模非常庞大.因此,vivo手机 ...

  9. spring security中当已登录用户再次访问登录界面时,应跳转到home

    @RequestMapping("/login") public String login(){ Authentication auth = SecurityContextHold ...

  10. Javers 比较两个类的差异

    Javers 在开发过程中遇到需求,比较数据库中的原数据与新修改要写入库中的数据.这个实体类是比较复杂的.例如有基本类型,BigDecimal类型,自定义类型,Date类型,List集合,Set集合, ...