起因是微信支付回調(diào)需要同時(shí)做發(fā)貨處理,但是發(fā)貨接口不能影響,需要隊(duì)列進(jìn)行異步處理1.
1.fastadmin? 后臺(tái)購買queue插件(基于think-queue消息隊(duì)列)
2.代碼
????????2.1 添加文件:application---->extra--->queue.php
????????內(nèi)容:我這里用的數(shù)據(jù)庫做的驅(qū)動(dòng)類型,這里不建議用數(shù)據(jù)庫,我這條件有限
<?php
return [
'connector'=>'database', //驅(qū)動(dòng)類型,可選擇 sync(默認(rèn)):同步執(zhí)行,database:數(shù)據(jù)庫驅(qū)動(dòng),redis:Redis驅(qū)動(dòng),topthink:Topthink驅(qū)動(dòng)
//database
'expire' => 60,
'default' => '',
'table' => 'faqueue_jobs', //插件下載的表
'dsn' => [
'type' => 'mysql',
'database' => '',
'hostname' => '127.0.0.1',
'username' => '',
'password' => '',
'prefix' => '',
]
];
? ? ? ? 2.2新建job文件:application---->job--->job1.php
? ? ? ? 內(nèi)容:
<?php
namespace app\job;
use addons\faqueue\library\QueueApi;
use think\Db;
use think\Log;
use think\queue\Job;
class Job1{
public function fire(Job $job, $data){
//....這里執(zhí)行具體的任務(wù)
//自動(dòng)發(fā)貨
log::write(["msg"=>"發(fā)貨開始"],"log");
self::sendGoods($data['out_trade_no'],$data['transaction_id'],$data['openid']);
log::write(["msg"=>"發(fā)貨結(jié)束"],"log");
if ($job->attempts() > 3) {
//通過這個(gè)方法可以檢查這個(gè)任務(wù)已經(jīng)重試了幾次了
log::write(["msg"=>"任務(wù)已經(jīng)超過三次"],"log");
}
//如果任務(wù)執(zhí)行成功后 記得刪除任務(wù),不然這個(gè)任務(wù)會(huì)重復(fù)執(zhí)行,直到達(dá)到最大重試次數(shù)后失敗后,執(zhí)行failed方法
$job->delete();
return true; //這里一定要返回 不然會(huì)不斷請(qǐng)求
// 也可以重新發(fā)布這個(gè)任務(wù)
// $job->release($delay); //$delay為延遲時(shí)間
}
public function failed($data){
log::write(["msg"=>"失敗原因","data"=>$data],"log");
// ...任務(wù)達(dá)到最大重試次數(shù)后,失敗了
}
}
? ? ? ? ?2.3在需要異步處理的地方:
????????
QueueApi::later(10,'app\job\job1',$delaydata);//QueueApi是插件,直接引入就行
? ? ? ? 2.4這里開啟queue后,日志文件一直在增大。解決方案是config文件里配置debug和log為level---->error。這樣線上就不會(huì)產(chǎn)生日志了
// 應(yīng)用調(diào)試模式
'app_debug' => Env::get('app.debug', false),
'log' => [
// 日志記錄方式,內(nèi)置 file socket 支持?jǐn)U展
'type' => 'File',
// 日志保存目錄
'path' => LOG_PATH,
// 日志記錄級(jí)別
'level' => ['error'],
],
3.光有隊(duì)列不行,需要跟進(jìn)程管理器supervisor配合。
? ? ? ? 3.1 安裝supervisor------centos7系統(tǒng)
#yum 安裝 supervisor
yum install -y supervisor
#生成配置文件 配置文件生成位置為/etc/supervisord.conf
? ? ? ? 3.3 配置supervisor.conf
vi /etc/supservisord.conf
在supservisord.conf文件最后加入如下配置
files = /etc/supervisord.d/*.conf
#這里用到了var/log 和var/run/supervisor
chmod -R 777 /var/log
chmod -R 777 /var/run/supervisor
? ? ? ? 3.4 項(xiàng)目配置,多個(gè)項(xiàng)目就配置多個(gè)子文件
vi /etc/supervisord.d/chaowanmh.conf
配置內(nèi)容如下:
[program:yuanqimohe-worker]
process_name=yuanqimohe #生成進(jìn)程名稱
command=php /www/wwwroot/yuanqimohe.hc8610.top/think queue:work --daemon #命令執(zhí)行
autostart=true #自動(dòng)啟動(dòng),隨著supervisor啟動(dòng)而啟動(dòng)
autorestart=true #假如掛掉自動(dòng)重啟
;user=admin #以哪個(gè)用戶執(zhí)行
numprocs=8 # 將指示監(jiān)控器運(yùn)行 8 個(gè) queue:work 進(jìn)程并監(jiān)視所有進(jìn)程,如果它們失敗,將自動(dòng)重新啟動(dòng)它們
redirect_stderr=true #設(shè)置代碼報(bào)錯(cuò)結(jié)果的輸出文件,排錯(cuò)好助手
stdout_logfile=/var/log/supervisor/think-queue.log #設(shè)置代碼打印結(jié)果輸出文件
注意:上述有注釋 是看每個(gè)配置有啥用的 實(shí)際配置不要加注釋 如下:
[program:chaowanmh-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /www/wwwroot/chaowanmh.hc8610.top/think queue:work --daemon
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=/var/log/supervisor/think-queue.log
? ? ? ? 3.5啟動(dòng)
#啟動(dòng)supservisor
supervisord -c /etc/supervisord.conf
#查看狀態(tài)
supervisorctl status
? ? ? ? 3.6 創(chuàng)建了配置文件后,你可以使用以下命令更新 Supervisor 配置并啟動(dòng)進(jìn)程:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start chaowanhm-worker:* //這是/etc/supervisord.d/chaowanmh.conf里配置progrom,如果有多個(gè)隊(duì)列,就啟動(dòng)多個(gè)
? ? ? ? 3.7 排查文章來源:http://www.zghlxwxcb.cn/news/detail-683361.html
1.查看進(jìn)程(紅框內(nèi)是進(jìn)程,作為小白的我,以為下邊那個(gè)是進(jìn)程,一直殺不死,也是絕了)
ps aux|grep supervisor
2.殺死進(jìn)程
kill 進(jìn)程id
3.重啟
supervisord -c /etc/supervisord.conf
4.查看狀態(tài)
supervisorctl status
5.重啟進(jìn)程
sudo supervisorctl start chaowanmh-worker:*
6.如果修改了配置,加載更新配置
sudo supervisorctl reread
sudo supervisorctl update
文章來源地址http://www.zghlxwxcb.cn/news/detail-683361.html
到了這里,關(guān)于fastadmin think-queue supervisor配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!