成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

think-queue使用教程-用戶注冊(cè)場(chǎng)景異步發(fā)送郵件

OnlyMyRailgun / 2114人閱讀

摘要:使用教程用戶注冊(cè)場(chǎng)景異步發(fā)送郵件本地環(huán)境系統(tǒng)是版本版本最近看到這個(gè)擴(kuò)展類(lèi)但是手冊(cè)沒(méi)寫(xiě)很是頭疼找了很多資料最后寫(xiě)了個(gè)場(chǎng)景寫(xiě)的不好大家見(jiàn)諒首先我們創(chuàng)建項(xiàng)目下載框架以及擴(kuò)展創(chuàng)建項(xiàng)目進(jìn)入項(xiàng)目目錄查看下載擴(kuò)展類(lèi)下載完畢進(jìn)入查看一下之后使用媽賣(mài)

think-queue使用教程-用戶注冊(cè)場(chǎng)景異步發(fā)送郵件
本地環(huán)境:
系統(tǒng)是:Mac Os
php版本:7.1
ThinkPHP版本:5.1.15

最近看到think-queue這個(gè)擴(kuò)展類(lèi) 但是手冊(cè)沒(méi)寫(xiě),很是頭疼,找了很多資料最后寫(xiě)了個(gè)場(chǎng)景,寫(xiě)的不好大家見(jiàn)諒
首先我們創(chuàng)建項(xiàng)目 下載tp框架以及think-queue擴(kuò)展

創(chuàng)建項(xiàng)目:

進(jìn)入項(xiàng)目目錄查看:

下載擴(kuò)展類(lèi)

下載完畢進(jìn)入查看一下:

之后使用MAMP(媽賣(mài)麻痹)創(chuàng)建虛擬機(jī)

之后創(chuàng)建數(shù)據(jù)庫(kù)以及數(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;

啟動(dòng)redis 服務(wù)

之后一些列的操作,比如開(kāi)啟強(qiáng)制路由,配置數(shù)據(jù)庫(kù),配置路由,配置模板標(biāo)簽等....

創(chuàng)建頁(yè)面Register.php控制器 目錄:application/index/controller/Register.php
創(chuàng)建Member.php 模型 目錄:application/index/model/Member.php
創(chuàng)建Register.php 驗(yàn)證器 目錄:application/index/validate/Register.php
創(chuàng)建處理隊(duì)列的文件 sendActivationMail.php 目錄:application/index/job/sendActivationMail.php

在Register控制器里面創(chuàng)建操作方法

model = new MemberModel();
    }

    /**
     * 渲染模板 展示注冊(cè)頁(yè)面
     * @return mixed
     */
    public function index()
    {
        return $this->fetch("index");
    }

    /**
     * 執(zhí)行注冊(cè)邏輯
     */
    public function doRegister()
    {
        if ($this->request->isPost()) {
            #實(shí)例化驗(yàn)證器 執(zhí)行驗(yàn)證 如果驗(yàn)證失敗跳轉(zhuǎn)并且提示
            $validate = new RegisterValidate();
            $data = $this->request->post();
            if (false === $validate->check($data)) return $this->error($validate->getError());
            //此處應(yīng)該加密密碼 md5 sha1 hash 都可以
            //寫(xiě)入注冊(cè)的用戶
            $result = $this->model->allowField(["email", "password"])->save($data);
            if ($result) {
                //注冊(cè)完畢后獲取到郵件賬號(hào)  然后加入到隊(duì)列
                $this->sendActivationMail($this->model->email);
                return $this->success("注冊(cè)成功,請(qǐng)前往郵箱激活您的賬號(hào)!");
            } else {
                return $this->error("注冊(cè)失敗");
            }
        }
    }

    /**
     * @param string $email 郵箱賬號(hào)
     */
    private function sendActivationMail($email = "")
    {
        $jobName = "appindexjobsendActivationMail";  //負(fù)責(zé)處理隊(duì)列任務(wù)的類(lèi)
        $data = ["email" => $email]; //當(dāng)前任務(wù)所需的業(yè)務(wù)數(shù)據(jù)
        $jobQueueName = "sendActivationMail"; //當(dāng)前任務(wù)歸屬的隊(duì)列名稱,如果為新隊(duì)列,會(huì)自動(dòng)創(chuàng)建


        $result = Queue::push($jobName, $data, $jobQueueName);

        if ($result) {
            echo date("Y-m-d H:i:s") . "一個(gè)新的隊(duì)列任務(wù)";
        } else {
            echo date("Y-m-d H:i:s") . "添加隊(duì)列出錯(cuò)";
        }

        // php think queue:work --queue sendActivationMail --daemon
    }
}

sendActivationMail.php 代碼

sendMail($data);

        //如果發(fā)送成功  就刪除隊(duì)列
        if ($isJobDone) {
            print ("任務(wù)執(zhí)行成功,,已經(jīng)刪除!" . "
");
            $job->delete();
        } else {
            //如果執(zhí)行到這里的話 說(shuō)明隊(duì)列執(zhí)行失敗  如果失敗三次就刪除該任務(wù)  否則重新執(zhí)行
            print ("任務(wù)執(zhí)行失敗!" . "
");
            if ($job->attempts() > 3) {
                print ("刪除任務(wù)!" . "
");
                $job->delete();
            } else {

                $job->release(); //重發(fā)任務(wù)
                print ("重新執(zhí)行!第" . $job->attempts() . "次重新執(zhí)行!
");
            }
        }
    }

    /**
     * 發(fā)送郵件
     * @param $data
     * @return bool
     */
    private function sendMail($data)
    {
        $title = "賬號(hào)激活郵件";
        $msg = "歡迎您注冊(cè)xxx網(wǎng)站,您的請(qǐng)點(diǎn)擊一下連接激活您的賬號(hào)!....";
        try {
            return Mail::send($title, $msg, $data["email"]);
        } catch (Exception $e) {
            return false;
        }
    }
}

寫(xiě)完之后再控制器切換到當(dāng)前目錄下 執(zhí)行

php think queue:work --queue sendActivationMail --daemon

代碼里面有很詳細(xì)的注釋,但是這個(gè)并不完整,,,沒(méi)有錯(cuò)誤的回調(diào),
等下次有時(shí)間的時(shí)候再寫(xiě)剩下的代碼!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28790.html

相關(guān)文章

  • Node & 單頁(yè)應(yīng)用 來(lái)做一個(gè)完整用戶系統(tǒng)吧!

    摘要:在路由回調(diào)函數(shù)里面操作的時(shí)候,直接用就可以獲取到客戶端的值。用回調(diào)函數(shù)來(lái)寫(xiě)后期看起來(lái)會(huì)很吃力看有沒(méi)有重名的看是不是同一郵箱又想重復(fù)注冊(cè)如果是以上兩種情況,就發(fā)送錯(cuò)誤信息。此賬戶名已經(jīng)被注冊(cè)。 1. 開(kāi)場(chǎng)白 用戶系統(tǒng)是許多網(wǎng)站的基礎(chǔ)。這篇文章主要就是講解如何寫(xiě)一個(gè)基于Node的單頁(yè)應(yīng)用的用戶系統(tǒng),這個(gè)用戶系統(tǒng)的功能包括:注冊(cè),登錄,自動(dòng)登錄,忘記密碼,修改密碼,郵件激活。如果使用在后端使...

    Chaz 評(píng)論0 收藏0
  • (轉(zhuǎn))開(kāi)源的任務(wù)隊(duì)列服務(wù)HTQ

    摘要:可變隊(duì)列會(huì)對(duì)長(zhǎng)期沒(méi)有更新動(dòng)態(tài)的那部分不活躍用戶進(jìn)行減緩速度,減緩對(duì)他們微博的獲取頻率,同時(shí)加大對(duì)活躍用戶的獲取頻率。 注:本文為轉(zhuǎn)載,原文請(qǐng)查看star7th的個(gè)人博客。 一、什么是 HTQ 先介紹下基本概念。 我們?cè)诰帉?xiě)程序時(shí),偶爾會(huì)遇到需要用到異步隊(duì)列的情況。比如說(shuō),我發(fā)送一萬(wàn)封郵件,如果單純使用一個(gè)for循環(huán)來(lái)發(fā)送,則執(zhí)行時(shí)間要很長(zhǎng),要等很久才能發(fā)完,同時(shí)很容易導(dǎo)致阻塞、超時(shí)等問(wèn)...

    LMou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<