## 用composer安裝queue插件線
```
~~~
"require": {
"php": ">=7.1.0",
"topthink/framework": "dev-master",
"topthink/think-captcha": "^1.0",
"topthink/think-installer": "^1.0.14",
"topthink/think-queue": "1.1.6",
"topthink/think-helper": "^1.0.7",
"karsonzhang/fastadmin-addons": "~1.2.4",
"overtrue/pinyin": "^3.0",
"phpoffice/phpspreadsheet": "1.12",
"overtrue/wechat": "4.2.11",
"nelexa/zip": "^3.3",
"ext-json": "*",
"ext-curl": "*",
"ext-pdo": "*",
"ext-bcmath": "*",
"txthinking/mailer": "^2.0",
"jaeger/querylist": "^4.2"
},
~~~
```
## 配置

```
~~~
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: yunwuxin <448901948@qq.com>
// +----------------------------------------------------------------------
return [
// 'connector' => 'Sync'
'connector' => 'Redis', // Redis 驅動
'expire' => 60, // 任務的過期時間,默認為60秒; 若要禁用,則設置為 null
'default' => 'default', // 默認的隊列名稱
'host' => '127.0.0.1', // redis 主機ip
'port' => 6379, // redis 端口
'password' => '', // redis 密碼
'select' => 1, // 使用哪一個 db,默認為 db0
'timeout' => 0, // redis連接的超時時間
'persistent' => false, // 是否是長連接
];
~~~
```
## 新建隊列處理函數

```
~~~
<?php
namespace app\message\controller;
use QL\QueryList;
use think\Exception;
use think\Queue;
use think\Queue\Job;
use think\Db;
class DoJob
{
/**
* fire方法是消息隊列默認調用的方法
* @param Job $job 當前的任務對象
* @param $data 發布任務時自定義的數據
* @return int
*/
public function fire(Job $job, $data)
{
//這里$data定義格式為:$data = [ 'type'=>1, 'data_id' => 123,'ts' => time()]
if (empty($data)) {
return 0;
}
// 有些消息在到達消費者時,可能已經不再需要執行了
// $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);
// if(!$isJobStillNeedToBeDone){
// $job->delete();
// return 0;
// }
if (is_array($data) && isset($data['type'])) {
$type = $data['type'];
if ($type == 1) {
$isJobDone = $this->qudemo2($data['url'],$data['rules']);
//執行發送郵件業務
//$isJobDone = $this->sendEmail($data['data_id']);
} else if ($type == 2) {
//執行APP推送消息業務
$isJobDone = $this->sendAppMessage($data['data_id']);
} else if ($type == 3) {
//執行訂單業務
$isJobDone = $this->orderService($data['data_id']);
} else {
return 0;
}
} else {
return 0;
}
if ($isJobDone) {
// 如果任務執行成功,刪除任務
$job->delete();
} else {
if ($job->attempts() > 3) {
//通過這個方法可以檢查這個任務已經重試了幾次了
$job->delete();
// 也可以重新發布這個任務
//$job->release(2); //$delay為延遲時間,表示該任務延遲2秒后再執行
}
}
}
}
~~~
```
## 需要隊列的地方直接用


### 注意注意注意 , 一定注意類名的選擇,沒有時可以用空
開啟php think queue:work --daemon --queue Test
要用隊列名
開啟 php think queue:listen
不要隊列名一定不用隊列名