热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

thinkphp6消息队列(queue)使用方法(发送邮件示例)

1、首先,你需要在你的框架中下载queue这个扩展composerrequiretopthinkthink-queue2.公共配置,配置文件位于:configqueue.phpre

1、首先,你需要在你的框架中下载queue这个扩展

composer require topthink/think-queue

2.公共配置,配置文件位于:config/queue.php

return [
'default' => 'redis',
'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',
]
,
];

你可以在配置文件中选择你需要使用数据库的类型,根据自己的需求使用,这里我选择的是redis

'default'=>'sync' //驱动类型,可选择 sync(默认):同步执行,database:数据库驱动,redis:Redis驱动//或其他自定义的完整的类名

3.创建任务类

单模块项目推荐使用 app\job 作为任务类的命名空间

多模块项目可用使用 app\module\job 作为任务类的命名空间 也可以放在任意可以自动加载到的地方

 

我这里是在  app\admin\job  创建了这个任务类

里面执行了我发送邮件的任务,这里的例子可以实现延迟发送邮件的任务

示例代码如下

php
namespace app\admin\job;
use think\facade\Log;
use think\queue\Job;
use tool\SendMail;
class Test
{
public function fire(Job $job, $data){
if ($job->attempts()>3){
//执行失败写入错误日志
Log::error('fire执行失败');
//删除这个任务
$job->delete();
}
else{
$toemail="407489255@qq.com"; //定义收件人的邮箱
$username="407486225@qq.com"; //发送方的邮箱地址
$password="qmxrvjgohiucbbgj"; //发送方邮箱的密码
$setFrom="1223524552@qq.com"; //设置发件人信息
$addReplyTo="1003729782@qq.com"; //设置收件人信息
$contrnt="邮件内容是 您的验证码是:123456,哈哈哈!111122"; //设置邮件内容
SendMail
::sendMail($toemail,$username,$password,$setFrom,$addReplyTo,$contrnt);
//执行成功删除这个任务
$job->delete();
}
}
}


这个是发送邮件的封住类 配合上面的使用

php
namespace tool;
use PHPMailer\PHPMailer\PHPMailer;
class SendMail
{
public static function sendMail($toemail,$username,$password,$setFrom,$addReplyTo,$contrnt)
{
$toemail ="$toemail";//定义收件人的邮箱
$mail = new PHPMailer();
$mail->isSMTP();// 使用SMTP服务
$mail->CharSet = "utf8";// 编码格式为utf8,不设置编码的话,中文会出现乱码
$mail->Host = "smtp.qq.com";// 发送方的SMTP服务器地址
$mail->SMTPAuth = true;// 是否使用身份验证
$mail->Username = "$username";// 发送方的163邮箱用户名,就是你申请163的SMTP服务使用的163邮箱
$mail->Password = "$password";// 发送方的邮箱密码,注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码!
$mail->SMTPSecure = "ssl";// 使用ssl协议方式
$mail->Port = 465;// 163邮箱的ssl协议方式端口号是465/994
$mail->setFrom("$setFrom", "Mailer");// 设置发件人信息,如邮件格式说明中的发件人,这里会显示为Mailer(xxxx@163.com),Mailer是当做名字显示
$mail->addAddress($toemail, 'Wang');// 设置收件人信息,如邮件格式说明中的收件人,这里会显示为Liang(yyyy@163.com)
$mail->addReplyTo("$addReplyTo", "Reply");// 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址
//$mail->addCC("xxx@163.com");// 设置邮件抄送人,可以只写地址,上述的设置也可以只写地址(这个人也能收到邮件)
//$mail->addBCC("xxx@163.com");// 设置秘密抄送人(这个人也能收到邮件)
//$mail->addAttachment("bug0.jpg");// 添加附件

$mail->Subject = "这是一个测试邮件";// 邮件标题
$mail->Body = "$contrnt";// 邮件正文
//$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用

if (!$mail->send()) {// 发送邮件
echo "Message could not be sent.";
echo "Mailer Error: " . $mail->ErrorInfo;// 输出错误信息
} else {
echo '发送成功';
}
}
}

 

 

4.发布任务   控制器调用这个  进入发布任务

php
declare (strict_types = 1);
namespace app\admin\controller;
use think\facade\Queue;
use think\Request;
class index
{
/**
* 显示资源列表
*
* @return \think\Response
*/
public function index()
{
//设置执行这个任务
Queue::later('20','app\admin\job\Test@fire',['name'=>'Test'],'fire');
}

 

注:一写参数的解释与使用方法

think\facade\Queue::push($job, $data = '', $queue = null) 和 think\facade\Queue::later($delay, $job, $data = '', $queue = null) 两个方法,前者是立即执行,后者是在$delay秒后执行


$job 是任务名
单模块的,且命名空间是app\job的,比如上面的例子一,写Job1类名即可
多模块的,且命名空间是app\module\job的,写model/Job1即可
其他的需要些完整的类名,比如上面的例子二,需要写完整的类名app\lib\job\Job2
如果一个任务类里有多个小任务的话,如上面的例子二,需要用@+方法名app\lib\job\Job2@task1app\lib\job\Job2@task2

$data 是你要传到任务里的参数

$queue 队列名,指定这个任务是在哪个队列上执行,同下面监控队列的时候指定的队列名,可不填

 


5.监听任务并执行

这是我的执行的方法

php think queue:listen --queue fire

 

 

参数解释


php think queue:listen



php think queue:work


 

两种,具体的可选参数可以输入命令加 --help 查看


可配合supervisor使用,保证进程常驻




推荐阅读
  • 如何通过swoole加速laravel的问题?
    这篇文章主要介绍了关于如何使用swoole加速laravel,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下再来复习一下吧,导致php慢的各种因素中解析性语言的 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • laravel 使用腾讯云 COS5全教程
    laravel使用腾讯云COS5全教程一下载首先第一步肯定是用composer把包安装下来,这里是laravel5.8版本的,所以我用的是cos5 ... [详细]
  • PHP 扩展编译的通用方法
    2019独角兽企业重金招聘Python工程师标准以memcache扩展为例子首先需要到软件的官方(如memcached的地址http:pecl.php.netp ... [详细]
  • 导读:今天编程笔记来给各位分享关于php动态扩展怎么加载的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • 系统osx10.11用的是brew下的php56brew下的nginx下了一个项目,在安装过程中提示缺少,intl和apc扩展,就用下面的语句下载了,也装上了,但php还是没有加载 ... [详细]
  • IOSUITableView解析(一)
    UITableView的作用由于Iphone的大小有限,所以UITableView的作用是巨大的。比如QQ,微博等应用都用到了该控件。UITableVi ... [详细]
  • 配置OracleACFS集群文件系统
    配置OracleACFS集群文件系统               2012-07-1010:18:39标签:asmacfs版权声明:原创作品,谢绝转载!否则将追究法律责任。     ... [详细]
  • 导读:很多朋友问到关于入门学什么php框架简单的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
  • queue接口特点:可以模拟队列行为,即“先进先出”。接口结构queue接口继承了Collection接口,并增加了一些新方法12345678910111213141516publ ... [详细]
  • diskmark使用教程
    首先说明一下软件各个参数的意义。1~9测试次数;50MB~4000MB测试规模;C,D,E,F选择测试对象;ALL测试以下所有;第一行代表你硬盘的读写速度。第二行代表你硬盘4K文件 ... [详细]
  • 一、ImageRequest不知道将ImageRequest放在这里进行介绍是否合适,因为毕竟它属于一个请求队列,与StringRequest、Json ... [详细]
  • log4cpp概述与使用实例一、log4cpp概述Log4cpp是一个开源的C类库,它提供了C程序中使用日志和跟踪调试的功能,它的优点如下࿱ ... [详细]
  • 【前端工具】nodejs+npm+vue 安装(windows)
    预备先看看这几个是干嘛的,相互的关系是啥。nodejs是语言,类比到php。npm是个包管理,类比到composer。vue是个框架&# ... [详细]
  • predis与phpredisredis官方推荐的php客户端是predis和phpredis。前者是完全使用php代码实现的原生客户端,后者则是用c编写的php拓展 ... [详细]
author-avatar
liuliyu2000_867
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有