think-queue消息隊列實例

瀏覽:10342 發布日期:2017/10/18 分類:ThinkPHP5專區
前提:thinkphp5框架基礎上,已包含topthink/think-queue消息隊列依賴包。

1、創建job數據表(字段不要更改)CREATE TABLE `tp_jobs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `queue` varchar(255) NOT NULL,
  `payload` longtext NOT NULL,
  `attempts` tinyint(3) unsigned NOT NULL,
  `reserved` tinyint(3) unsigned NOT NULL,
  `reserved_at` int(10) unsigned DEFAULT NULL,
  `available_at` int(10) unsigned NOT NULL,
  `created_at` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、配置(配置文件位于 application/extra/queue.php)return [
    'connector' => 'database'  //驅動類型,可選擇 sync(默認):同步執行,database:數據庫驅動,redis:Redis驅動,topthink:Topthink驅動
];
3、創建任務類,這里為了區分??櫚ザ來唇艘桓瞿?楹屠?。class QueueClient
{
    /**
     * 郵件提醒
     * @param array $data  內容
     * @return 
     */
    public function sendMAIL(Job $job, $data) 
    {
        $isJobDone = $this->send($data);       
        if ($isJobDone) {
            //成功刪除任務
            $job->delete();
        } else {
            //任務輪詢4次后刪除
            if ($job->attempts() > 3) {              
                // 第1種處理方式:重新發布任務,該任務延遲10秒后再執行
                //$job->release(10); 
                // 第2種處理方式:原任務的基礎上1分鐘執行一次并增加嘗試次數
                //$job->failed();   
                // 第3種處理方式:刪除任務
                $job->delete();  
            }
        }
    }

    /**
     * 根據消息中的數據進行實際的業務處理
     * @param array|mixed    $data     發布任務時自定義的數據
     * @return boolean                 任務執行的結果
     */
    private function send($data) 
    {
        $sendemail = new Sendmail();
        $result    = $sendemail->sendMail($data); 
        if ($result) {
            return true;
        } else {
            return false;
        }            
    }
}
4、增加任務//加入任務隊列中
 \think\Queue::push('app\common\queue\[email protected]', $email_data, $queue = null);
5、在控制臺監聽任務并執行C:\wamp\www\test>php think queue:listen以上為消息隊列使用全部過程,你可以到//www.bestmx.top/home/article/index/aid/38下載demo測試,有問題可以留言。
最佳答案
評論( 相關
后面還有條評論,點擊查看>>