PHP-Beanstalkd消息隊列 延遲隊列的搭建使用

介紹:

Beanstalkd,一個高性能、輕量級的分布式內(nèi)存隊列系統(tǒng),最初設(shè)計的目的是想通過后臺異步執(zhí)行耗時的任務(wù)來降低高容量Web應(yīng)用系統(tǒng)的頁面訪問延遲,支持過有9.5 million用戶的Facebook Causes應(yīng)用。后來開源,現(xiàn)在有PostRank大規(guī)模部署和使用,每天處理百萬級任務(wù)。Beanstalkd是典型的類Memcached設(shè)計,協(xié)議和使用方式都是同樣的風格,所以使用過memcached的用戶會覺得Beanstalkd似曾相識。

依賴環(huán)境:

>=PHP7.0??

>=Centos7.0?

最好是寶塔的Lnmp

supervisor 進程管理工具

Pheanstalk PHP簡單操作類

安裝與使用:

一、安裝Beanstalkd

官網(wǎng)地址:

????https://kr.github.io/beanstalkd/

1.Centos安裝:

????yum install beanstalkd --enablerepo=epel

2.源碼安裝:

????源碼下載地址:http://kr.github.io/beanstalkd/download.html

????tar -zxvf /usr/bin/beanstalkd/beanstalkd-1.10.tar.gzcdbeanstalkdmake

?????install

?????PERFIX=/usr/bin/beanstalkd

3.啟動:

????/usr/bin/beanstalkd -l 0.0.0.0 -p11300 -b /var/lib/beanstalkd/binlog -F &

????beanstalkd參數(shù):

????/usr/bin/beanstalkd -h

????Use:/usr/bin/beanstalkd [OPTIONS]

????Options:

????-b 開啟binlog,斷電后重啟會自動恢復任務(wù)。

????-f MS fsync最多每MS毫秒-F從不fsync(默認)

????-l ADDR偵聽地址(默認為0.0.0.0)

????-p端口偵聽端口(默認為11300)

????-u USER成為用戶和組

????-z BYTES設(shè)置最大作業(yè)大小(以字節(jié)為單位)(默認值為65535)

????-s BYTES設(shè)置每個wal文件的大?。J為10485760) (將被舍入到512字節(jié)的倍數(shù))

????-c壓縮binlog(默認)

????- n 不要壓縮binlog

????-v顯示版本信息

????-V增加冗長度

????-h顯示這個幫助? ??

? ? -l 如果是本機使用那么就是127.0.0.1?

4.配置文件

/etc/sysconfig/beanstalkd

5.使用PHP操作beanstalkd

????項目地址:https://github.com/pda/pheanstalk/

? ? 下載好如果是TP5的話直接放在根目錄下的extend目錄下就可以了 然后在控制器

? ? 生產(chǎn)者代碼:

????use Pheanstalk\Pheanstalk;

? ??$pheanstalk = Pheanstalk::create('127.0.0.1');

? ??$pheanstalk->useTube($tubeName)->put(json_encode( $jobData),1024,$delay);

? ? useTube() 傳入隊列名稱

? ? put()

?????第一個參數(shù)是要存入的信息?

? ? 第二個參數(shù)是優(yōu)先級默認1024 數(shù)字越小優(yōu)先級越高

? ? 第三個參數(shù)是延遲時間

? ? 第四個參數(shù)是ttr時間也就是超時時間 (暫無用處)

? ? 消費者代碼:

cil模式下 while 不會超時

? ??use Pheanstalk\Pheanstalk;

? ??$pheanstalk = Pheanstalk::create('127.0.0.1');

????$tubeName='user_paydingdan_list';

????????while(true){

? ? ????????//獲取隊列信息,reserve 阻塞獲取

? ????????? $job = $pheanstalk ->watch($tubeName) ->ignore('default') ->reserve();

? ? ? ? ? ? $data = $job->getData();

? ??????????$data = json_decode($data,true);

? ?????????? $pheanstalk->delete($job);

? ? ????}

watch() 監(jiān)聽的管道名稱

reserve() 獲取ready的任務(wù) 阻塞獲取

getData() 得到存入的任務(wù)信息

delete($job) 使用完即可刪除 或其他操作

監(jiān)聽消費的進程需要安裝supervisor

centos7安裝supervisor詳細教程:

supervisor:要安裝的軟件的名稱。

supervisord:裝好supervisor軟件后,supervisord用于啟動supervisor服務(wù)。

supervisorctl:用于管理supervisor配置文件中program。

使用yum命令安裝(推薦):

# yum install epel-release

# yum install -y supervisor

# systemctl enable supervisord # 開機自啟動

# systemctl start supervisord # 啟動supervisord服務(wù)

# systemctl status supervisord # 查看supervisord服務(wù)狀態(tài)

# ps -ef|grep supervisord # 查看是否存在supervisord進程

編輯配置文件

隨后我們在supervosprd.d中創(chuàng)建一個delploy.ini文件并編輯如下

[program:DeployLinux] #DeployLinux 為程序的名稱

command=dotnet DeployLinux.dll #需要執(zhí)行的命令

directory=/home/publish #命令執(zhí)行的目錄

environment=ASPNETCORE__ENVIRONMENT=Production #環(huán)境變量

user=root #用戶

stopsignal=INT

autostart=true #是否自啟動

autorestart=true #是否自動重啟

startsecs=3 #自動重啟時間間隔(s)

stderr_logfile=/var/log/ossoffical.err.log #錯誤日志文件

stdout_logfile=/var/log/ossoffical.out.log #輸出日志文件

然后重啟加載服務(wù)

關(guān)于tp5的cil 命令:

詳情看tp5手冊即可 注意大小也

Pheanstalk 類的用法
https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80466702

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容