任务队列实现

这里采用的是发邮件的形式

一、首先下载任务队列queue类

composer require topthink/think-queue

查看自己的配置文件:
config下queue.php

<?php
return ['default'     => 'database', //这里采用的是数据库形式存储'connections' => ['sync'     => ['type' => 'sync',],'database' => ['type'       => 'database','queue'      => 'default','table'      => 'jobs',  //表名'connection' => null,],'redis'    => ['type'       => 'redis','queue'      => 'default','host'       => '127.0.0.1','port'       => 6379,'password'   => '','select'     => 0,'timeout'    => 0,'persistent' => false,],],'failed'      => ['type'  => 'none','table' => 'failed_jobs',],
];

建立jobs数据表:

CREATE TABLE `jobs` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`queue` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,`payload` longtext COLLATE utf8mb4_unicode_ci,`attempts` tinyint(3) unsigned DEFAULT NULL,`reserve_time` int(10) unsigned DEFAULT NULL,`available_time` int(10) unsigned DEFAULT NULL,`create_time` int(10) unsigned NOT NULL,PRIMARY KEY (`id`),KEY `zfw_jobs_queue_index` (`queue`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

建立任务队列:app\job\test.php

public function fire(Job $job,$data){if ($job->attempts()>3){Log::error('Test执行失败');}else{//发给谁$to = '123456789@qq.com';//标题$title = 'XXXXXX';//内容$content = "XXXXXX";//调用封装好的Email类(new sendEmail())->sendMail($to,$title,$content);//执行成功后删除队列$job->delete();}}

使用模型监听事件(此处注意在模型内完成)

//执行添加
public static function add($data){return self::create($data);}
//监听添加成功之后
public static function onAfterInsert($user){Queue::later(60,'app\job\Test',$user,'Test');}

执行任务

php think queue:listen --queue Test  //执行队列nohup php think queue:listen --queue Test&   //不以守护进程执行

tp6监听事件+消息队列实现发邮件相关推荐

  1. Spring Boot监听事件同步和异步使用

    废话前言: 代码环境:WIN7+IDEA+JAD1.8+Spring Boot 2.0 首先说一下我为什么使用事件,比如现在创建一个订单但是我创建成功后要给客户发送一条短信和一个邮件提醒,本身没创建订 ...

  2. electron ipcRenderer渲染进程发送事件, ipcMain主进程监听事件

    ipcMain 从主进程到渲染进程的异步通信.它处理从渲染器进程(网页)发送出来的异步和同步信息. 从渲染器进程发送的消息到主进程的异步通信. 主进程: import { app, BrowserWi ...

  3. nginx监听事件流程

    在前面的几篇文章中已经分析了master进程.work进程的初始化流程.但一直没有分析监听socket的创建流程,nginx服务器只有在创建socket, 绑定socet,监听socket执行完成后, ...

  4. Android——监听事件总结

    各种监听事件 1.按钮 Button (1)点击监听 btn_1.setOnClickListener(new View.OnClickListener() { (2)长按监听 btn_1.setOn ...

  5. iOS OC与JS交互(WebView监听事件)

    在iOS应用的开发过程中,我们经常会使用到WebView,当我们对WebView进行操作的时候,有时会需要进行源生的操作.那么我记下来就与大家分享一下OC与JS交互. 首先先说第一种方法,并没有牵扯O ...

  6. 利用勾子监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理

    钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统.每当特定     的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得     到控制权.这时钩子函数即可以加工处理 ...

  7. HTML学习14-js 内置对象 Date() 常用的日期的方法 定时器 倒计时 监听事件

    内置对象 内置对象: 内置对象就是指这个语言自带的一些对象,供开发者使用,这些对象提供了一些常用的或是最基本而必要的功能. 手机买来就能发短信 就能打电话 日期函数 ( Date() ) 这个函数 ( ...

  8. ROS中 Python/C++ 键盘按键监听事件

    ROS中 Python/C++ 键盘按键监听事件 这几天在肝全国智能驾驶大赛,真就挺累的:抓狂思考,手搓代码,疯狂编译,要命运行.在这趟火车上,被各种各样的问题卡住甚至卡死,就很难受好吧.至今,我深深 ...

  9. Cocos 发射和监听事件 事件派送(TypeScript)

    监听和发射事件 监听事件 事件处理是在节点(cc.Node)中完成的.对于组件,可以通过访问节点 this.node 来注册和监听事件. 事件监听函数 on 可以传第三个参数 target,用于绑定响 ...

最新文章

  1. 测试驱动开发是否是一种强迫症?
  2. Oracle Quality --- Setup Collection Element and Collection Plan
  3. LeetCode 1636. 按照频率将数组升序排序(哈希+排序)
  4. java 如何去掉http debug日志_Spring Boot手把手教学(3):从零配置logback日志
  5. [Web Chart系列之五] 1. 实战draw2d 之总体介绍
  6. Seasonality Core for mac(世界天气预报)
  7. 深度原理与框架-图像超分辨重构-tensorlayer
  8. 人工智能翻译能否替代人工翻译,人工智能翻译何去何从
  9. 关于桌面文件,软件图标,带蓝底白问号的解决方法
  10. Python教程传送门,手把手带你学会Python!
  11. 前端cookie详解
  12. 零基础如何学 Web 前端开发
  13. 物联网开源工具Unik:用Unikernel提高连接安全性
  14. 改名叫Benson...
  15. Redis Geospatial地理位置
  16. 创维,彩电业的“技术咖”,能否赢得下一个十年?
  17. 设备维修管理系统java源码_Jsp设备维修管理系统javaweb设备维修管理系统mysql数据源...
  18. python关联通达信pywin32_Python ctypes.wintypes方法代码示例
  19. 使用百度API实现实时公交线路查询及列表显示
  20. python urldecode用法

热门文章

  1. 用ArcGIS制作专题地图
  2. Winform实现类似Viso的简单的流程图
  3. HTML5新属性+CSS3动画
  4. 如何提高存货周转率?存货周转率真的越高越好吗?
  5. 计算机毕业设计jsp旅游网站
  6. IE恶意修改之终极解决方案
  7. java在线影院系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  8. ERP解决方案和开源标准物质的企业生产力
  9. [VSHalcon] 无法定位程序输入点于动态链接库 .exe上
  10. 电脑蓝屏代码116是什么?Win7电脑出现蓝屏代码116(nvlddmkm.sys)的解决方法