安装
composer require topthink/think-queue
应用
新建文件app\common\jobs\SendEmailJob.php
<?php
namespace app\common\jobs;
use think\facade\Log;
use think\queue\Job;
class SendEmailJob
{
public function fire(Job $job, $data)
{
if (!$this->checkJob($data)){
$job->delete();
return;
}
if ($this->doJob($data)){
$job->delete();
Log::log("dismiss job has been down and deleted");
}else{
//检查任务重试次数
if($job->attempts() > 3){
Log::log("dismiss job has been retried more that 3 times");
$job->delete();
}
}
}
private function checkJob($data)
{
return true;
}
private function doJob($data)
{
// 发送邮箱
return Email::send($data['to'], $data['title'], $data['content']);
}
}
新建控制器文件 app\index\controller\Index.php
<?php
namespace app\index\controller;
use think\facade\Queue;
class Index
{
public function sendEmail()
{
$i = 0;
$res = [];
while ($i < 10){
$res[$i] = Queue::push(\app\common\jobs\SendEmailJob::class, [
'to' => '1046512080@qq.com',
'title' => '厉害了',
'content' => 'ddddd'
], 'send_email');
$i++;
}
return json($res);
}
}
supervisor进程守护(deepin)
touch /etc/supervisor/conf.d/queue.conf
vim queue.conf
[program:queue]
; 执行命令目录
directory=/www/wwwroot/tp6.okcoder.com/
; 执行命令
command=php think queue:work --queue send_email,send_message
; 执行命令用户
user=root
autostart=true
; 程序意外退出自动重启
autorestart=true