摘要:使用教程用戶注冊場景異步發(fā)送郵件本地環(huán)境系統(tǒng)是版本版本最近看到這個擴展類但是手冊沒寫很是頭疼找了很多資料最后寫了個場景寫的不好大家見諒首先我們創(chuàng)建項目下載框架以及擴展創(chuàng)建項目進入項目目錄查看下載擴展類下載完畢進入查看一下之后使用媽賣
think-queue使用教程-用戶注冊場景異步發(fā)送郵件
本地環(huán)境:
系統(tǒng)是:Mac Os
php版本:7.1
ThinkPHP版本:5.1.15
最近看到think-queue這個擴展類 但是手冊沒寫,很是頭疼,找了很多資料最后寫了個場景,寫的不好大家見諒
首先我們創(chuàng)建項目 下載tp框架以及think-queue擴展
創(chuàng)建項目:
進入項目目錄查看:
下載擴展類
下載完畢進入查看一下:
之后使用MAMP(媽賣麻痹)創(chuàng)建虛擬機
之后創(chuàng)建數(shù)據(jù)庫以及數(shù)據(jù)表;
create database if not exists myproject; use myproject; DROP TABLE IF EXISTS member; CREATE TABLE IF NOT EXISTS member( id int(11) AUTO_INCREMENT primary key comment "ID", email VARCHAR(32) NOT NULL DEFAULT "" COMMENT "", password VARCHAR(255) NOT NULL default "" comment "", create_time INT(11) UNSIGNED NOT NULL DEFAULT 0 comment "", update_time INT(11) UNSIGNED NOT NULL DEFAULT 0 comment "", unique key (email) )engine innodb charset utf8;
啟動redis 服務
之后一些列的操作,比如開啟強制路由,配置數(shù)據(jù)庫,配置路由,配置模板標簽等....
創(chuàng)建頁面Register.php控制器 目錄:application/index/controller/Register.php
創(chuàng)建Member.php 模型 目錄:application/index/model/Member.php
創(chuàng)建Register.php 驗證器 目錄:application/index/validate/Register.php
創(chuàng)建處理隊列的文件 sendActivationMail.php 目錄:application/index/job/sendActivationMail.php
在Register控制器里面創(chuàng)建操作方法
model = new MemberModel(); } /** * 渲染模板 展示注冊頁面 * @return mixed */ public function index() { return $this->fetch("index"); } /** * 執(zhí)行注冊邏輯 */ public function doRegister() { if ($this->request->isPost()) { #實例化驗證器 執(zhí)行驗證 如果驗證失敗跳轉(zhuǎn)并且提示 $validate = new RegisterValidate(); $data = $this->request->post(); if (false === $validate->check($data)) return $this->error($validate->getError()); //此處應該加密密碼 md5 sha1 hash 都可以 //寫入注冊的用戶 $result = $this->model->allowField(["email", "password"])->save($data); if ($result) { //注冊完畢后獲取到郵件賬號 然后加入到隊列 $this->sendActivationMail($this->model->email); return $this->success("注冊成功,請前往郵箱激活您的賬號!"); } else { return $this->error("注冊失敗"); } } } /** * @param string $email 郵箱賬號 */ private function sendActivationMail($email = "") { $jobName = "appindexjobsendActivationMail"; //負責處理隊列任務的類 $data = ["email" => $email]; //當前任務所需的業(yè)務數(shù)據(jù) $jobQueueName = "sendActivationMail"; //當前任務歸屬的隊列名稱,如果為新隊列,會自動創(chuàng)建 $result = Queue::push($jobName, $data, $jobQueueName); if ($result) { echo date("Y-m-d H:i:s") . "一個新的隊列任務"; } else { echo date("Y-m-d H:i:s") . "添加隊列出錯"; } // php think queue:work --queue sendActivationMail --daemon } }
sendActivationMail.php 代碼
sendMail($data); //如果發(fā)送成功 就刪除隊列 if ($isJobDone) { print ("任務執(zhí)行成功,,已經(jīng)刪除!" . " "); $job->delete(); } else { //如果執(zhí)行到這里的話 說明隊列執(zhí)行失敗 如果失敗三次就刪除該任務 否則重新執(zhí)行 print ("任務執(zhí)行失敗!" . " "); if ($job->attempts() > 3) { print ("刪除任務!" . " "); $job->delete(); } else { $job->release(); //重發(fā)任務 print ("重新執(zhí)行!第" . $job->attempts() . "次重新執(zhí)行! "); } } } /** * 發(fā)送郵件 * @param $data * @return bool */ private function sendMail($data) { $title = "賬號激活郵件"; $msg = "歡迎您注冊xxx網(wǎng)站,您的請點擊一下連接激活您的賬號!...."; try { return Mail::send($title, $msg, $data["email"]); } catch (Exception $e) { return false; } } }
寫完之后再控制器切換到當前目錄下 執(zhí)行
php think queue:work --queue sendActivationMail --daemon
代碼里面有很詳細的注釋,但是這個并不完整,,,沒有錯誤的回調(diào),
等下次有時間的時候再寫剩下的代碼!
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/28790.html
摘要:在路由回調(diào)函數(shù)里面操作的時候,直接用就可以獲取到客戶端的值。用回調(diào)函數(shù)來寫后期看起來會很吃力看有沒有重名的看是不是同一郵箱又想重復注冊如果是以上兩種情況,就發(fā)送錯誤信息。此賬戶名已經(jīng)被注冊。 1. 開場白 用戶系統(tǒng)是許多網(wǎng)站的基礎。這篇文章主要就是講解如何寫一個基于Node的單頁應用的用戶系統(tǒng),這個用戶系統(tǒng)的功能包括:注冊,登錄,自動登錄,忘記密碼,修改密碼,郵件激活。如果使用在后端使...
摘要:可變隊列會對長期沒有更新動態(tài)的那部分不活躍用戶進行減緩速度,減緩對他們微博的獲取頻率,同時加大對活躍用戶的獲取頻率。 注:本文為轉(zhuǎn)載,原文請查看star7th的個人博客。 一、什么是 HTQ 先介紹下基本概念。 我們在編寫程序時,偶爾會遇到需要用到異步隊列的情況。比如說,我發(fā)送一萬封郵件,如果單純使用一個for循環(huán)來發(fā)送,則執(zhí)行時間要很長,要等很久才能發(fā)完,同時很容易導致阻塞、超時等問...
閱讀 3296·2023-04-26 01:30
閱讀 772·2021-11-08 13:15
閱讀 1904·2021-09-24 10:35
閱讀 1072·2021-09-22 15:41
閱讀 1983·2019-08-30 15:44
閱讀 694·2019-08-30 13:22
閱讀 1072·2019-08-30 13:06
閱讀 1281·2019-08-29 13:22