当前位置: 首页 > 后端技术 > PHP

think-queue使用教程-用户注册场景异步发送邮件

时间:2023-03-29 18:36:54 PHP

think-queue使用教程-用户注册场景异步发送邮件本地环境:系统:MacOsphp版本:7.1ThinkPHP版本:5.1.15最近看到扩展类think-queue但是说明书没有写,很头疼,找了一大堆资料最后写了一个场景。文笔不好请见谅。首先,我们创建一个项目来下载tp框架和think-queue扩展。)创建虚拟机后创建数据库和数据表;如果不存在则创建数据库myproject;使用myproject;DROPTABLEIFEXISTSmember;CREATETABLEIFNOTEXISTSmember(idint(11)AUTO_INCREMENT主键注释'ID',emailVARCHAR(32)NOTNULLDEFAULT''COMMENT'',passwordVARCHAR(255)NOTNULLdefault''comment'',create_timeINT(11)UNSIGNEDNOTNULLDEFAULT0comment'',update_timeINT(11)UNSIGNEDNOTNULLDEFAULT0评论'',唯一键(email))engineinnodbcharsetutf8;启动redis服务后的一系列操作,比如开启强制路由、配置数据库、配置路由、配置模板标签等...创建页面Register.phpcontroller目录:application/index/controller/Register.phpcreateMember.php模型目录:application/index/model/Member.php创建Register.php验证器目录:application/index/validate/Register.php创建处理队列文件sendActivationMail。php目录:application/index/job/sendActivationMail.php在Register控制器中创建一个操作方法model=newMemberModel();}/***渲染模板以显示注册页面*@returnmixed*/publicfunctionindex(){return$this->fetch('index');}/***执行注册逻辑*/publicfunctiondoRegister(){if($this->request->isPost()){#实例化验证器执行验证如果验证失败则跳转提示$validate=new注册验证();$data=$this->request->post();如果(false===$validate->check($data))return$this->error($validate->getError());//这里密码要加密md5sha1hash才能//写给注册用户$result=$this->model->allowField(['email','password'])->save($data);if($result){//注册后获取邮箱账号,加入队列$this->sendActivationMail($this->model->email);return$this->success('注册成功,请前往邮箱激活账号!');}else{return$this->error('注册失败');}}}/***@paramstring$email邮箱账号*/privatefunctionsendActivationMail($email=''){$jobName='app\index\job\sendActivationMail';//负责处理队列任务Class$data=['email'=>$email];//当前任务需要的业务数据$jobQueueName='sendActivationMail';//当前任务所属的队列名称,如果是新队列,会自动创建$result=Queue::push($jobName,$data,$jobQueueName);如果($result){回声日期('Y-m-dH:i:s')。'一个新的队列任务';}else{echodate('Y-m-dH:i:s').'添加队列时出错';}//phpthinkqueue:work--queuesendActivationMail--daemon}}sendActivationMail.php代码sendMail($data);//发送成功则删除队列$工作->删除();}else{//如果执行到这里,失败3次则说明队列执行失败删除任务,否则重新执行print("任务执行失败!"."\n");if($job->attempts()>3){print("删除任务!"."\n");$工作->删除();}else{$job->release();//重新发送任务print("重新执行!No.".$工作->尝试()。"重新执行!\n");}}}/***发送邮件*@param$data*@returnbool*/privatefunctionsendMail($data){$title='账户激活邮件';$msg='欢迎注册xxx网站,请点击链接激活您的账户!...';尝试{returnMail::send($title,$msg,$data['email']);}catch(Exception$e){返回false;}}}写完之后controller切换到当前目录,执行phpthinkqueue:work--queuesendActivationMail--daemon代码里面有很多详细的注释,但是这个不完整,,,没有错误回调,我会的剩下的代码下次有时间再写吧!