畸情~内裤奇缘正文完整,国产精品电影在线,秋葵视频在线免费观看,久久久久久综合七次郎,国产精品入口麻豆电影网,亚洲另类自拍

  • 只工作不玩耍,聰明的小孩會變傻
  • 年歲有加,并非垂老,理想丟棄,方墜暮年
  • 21 文章
  • 0 評論
  • 2 友鏈
安裝thinkphp-queue
composer install topthink/think-queue
win10安裝redis

redis下載地址:點(diǎn)我去下載

找到相應(yīng)的msi文件下載安裝即可

php安裝redis擴(kuò)展

redis擴(kuò)展下載地址:點(diǎn)我去下載

需要注意選擇相應(yīng)的VC擴(kuò)展包,同時(shí)php.ini開啟redis擴(kuò)展

app\index\controller\Demo.php
<?php
namespace app\index\controller;

use think\facade\Queue;

class Demo{
    public function index()
    {
        //當(dāng)前任務(wù)將由哪個(gè)類來負(fù)責(zé)處理。
        //當(dāng)輪到該任務(wù)時(shí),系統(tǒng)將生成一個(gè)該類的實(shí)例,并默認(rèn)調(diào)用其 fire 方法
        $jobHandlerClassName = 'app\task\job\Order';
        
        //當(dāng)前任務(wù)歸屬的隊(duì)列名稱,如果為新隊(duì)列,會自動創(chuàng)建
        //php think queue:work --queue orderJobQueue
        //php think queue:work --queue orderJobQueue --daemon
        $jobQueueName = "orderJobQueue";
        
        //數(shù)組數(shù)據(jù)
        $orderData = [
            'id' => uniqid(),
            'time' => time(),
        ];
        
        //將該任務(wù)推送到消息隊(duì)列,等待對應(yīng)的消費(fèi)者去執(zhí)行
        //這里只是負(fù)責(zé)將數(shù)據(jù)添加到相應(yīng)的隊(duì)列名稱的隊(duì)列里,消費(fèi)者與生產(chǎn)者并無聯(lián)系
        $isPushed = Queue::push($jobHandlerClassName , $orderData, $jobQueueName);
        
        if( $isPushed !== false ){
            echo date('Y-m-d H:i:s') . " 隊(duì)列添加成功";
        }else{
            echo '隊(duì)列添加失敗';
        }
    }
}
app\task\job\Order.php
<?php
namespace app\task\job;

use think\queue\Job;
use think\facade\Log;

/**
 * @Title: app\task\job$Order
 * @Package package_name
 * @Description: todo(測試訂單消費(fèi)者)
 * @author 蘇曉信 <654108442@qq.com>
 * @date 2020年11月20日
 */
class Order{
    /**
     * @Title: fire
     * @Description: todo(fire方法是消息隊(duì)列默認(rèn)調(diào)用的方法)
     * @param Job $job
     * @param array $data
     * @author 蘇曉信 <654108442@qq.com>
     * @date 2020年11月20日
     * @throws
     */
    public function fire(Job $job, $data)
    {
        //有些消息在到達(dá)消費(fèi)者時(shí),可能已經(jīng)不再需要執(zhí)行了
        $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);
        if(!$isJobStillNeedToBeDone){
            $job->delete();
            return;
        }
        
        $isJobDone = $this->orders($data);
        
        if ($isJobDone) {
            //如果任務(wù)執(zhí)行成功,記得刪除任務(wù)
            $job->delete();
        }else{
            //通過這個(gè)方法可以檢查這個(gè)任務(wù)已經(jīng)重試了幾次了
            if ($job->attempts() > 3){
                Log::error('試了3次了');
                $job->delete();
                
                //也可以重新發(fā)布這個(gè)任務(wù)
                //print("<info>Hello Job will be availabe again after 2s."."</info>\n");
                //$job->release(2); //$delay為延遲時(shí)間,表示該任務(wù)延遲2秒后再執(zhí)行
            }
        }
    }
    
    /**
     * @Title: checkDatabaseToSeeIfJobNeedToBeDone
     * @Description: todo(有些消息在到達(dá)消費(fèi)者時(shí),可能已經(jīng)不再需要執(zhí)行了)
     * @param array $data
     * @return boolean
     * @author 蘇曉信 <654108442@qq.com>
     * @date 2020年11月20日
     * @throws
     */
    private function checkDatabaseToSeeIfJobNeedToBeDone($data){
        return true;
    }
    
    /**
     * @Title: orders
     * @Description: todo(數(shù)據(jù)處理)
     * @param array $data
     * @author 蘇曉信 <654108442@qq.com>
     * @date 2020年11月20日
     * @throws
     */
    public function orders($data)
    {
        //對訂單進(jìn)行數(shù)據(jù)庫操作或其他等等
        Log::info(date('Y-m-d H:i:s').' - data:'.json_encode($data));
        return true;
    }
}
監(jiān)聽任務(wù)并執(zhí)行
php think queue:work --queue orderJobQueue

多任務(wù)

app\index\controller\Demo.php

<?php
namespace app\index\controller;

use think\Exception;
use think\facade\Queue;

class Demo{
    public function index()
    {
        $taskType = $_GET['taskType'];
        switch ($taskType) {
            // 域名地址/index/demo/index?taskType=taskA
            case 'taskA':
                $jobHandlerClassName  = 'app\task\job\Order@taskA';
                $jobDataArr = ['a' => '1'];
                //php think queue:work --queue orderAJobQueue
                $jobQueueName = "orderAJobQueue";
                break;
            // 域名地址/index/demo/index?taskType=taskB
            case 'taskB':
                $jobHandlerClassName  = 'app\task\job\Order@taskB';
                $jobDataArr = ['b' => '2'];
                //php think queue:work --queue orderBJobQueue
                $jobQueueName = "orderBJobQueue";
                break;
            default:
                break;
        }
        
        $isPushed = Queue::push($jobHandlerClassName, $jobDataArr, $jobQueueName);
        if ($isPushed !== false) {
            echo("$taskType 添加至 ".$jobQueueName ."<br>");
        }else{
            throw new Exception("push a new $taskType of MultiTask Job Failed!");
        }
    }
}
app\task\job\Order.php
<?php
namespace app\task\job;

use think\queue\Job;
use think\facade\Log;

class Order{
    public function taskA(Job $job, $data){
        $isJobDone = $this->_doTaskA($data);
        if ($isJobDone) {
            $job->delete();
        }else{
            if ($job->attempts() > 3) {
                $job->delete();
            }
        }
    }
    
    public function taskB(Job $job, $data){
        $isJobDone = $this->_doTaskB($data);
        if ($isJobDone) {
            $job->delete();
        }else{
            if ($job->attempts() > 2) {
                $job->release();
            }
        }
    }
    
    private function _doTaskA($data) {
        Log::info(date('Y-m-d H:i:s').' - TaskA - data : '.json_encode($data));
        return true;
    }
    
    private function _doTaskB($data) {
        Log::info(date('Y-m-d H:i:s').' - TaskB - data : '.json_encode($data));
        return true;
    }
}
監(jiān)聽任務(wù)并執(zhí)行
php think queue:work --queue orderAJobQueue
php think queue:work --queue orderBJobQueue