我是用的PHP框架是thinkphp6,所以使用的相對來說比較匹配的think-queue.盡量把每一步都寫出來,經過自己采坑,盡量做到按照步驟下來,基本都能跑通!
官方地址:https://github.com/top-think/think-queue
第一步:安裝composer(如果這一步都不會,那么就不用看下去了)
第二步:在項目根目錄下,安裝要用的依賴,執行:composer require topthink/think-queue
第三步:本地安裝redis服務端。我這里用的是集成工具,自帶redis服務,如果沒有的話,就去redis的官網:https://redis.io/,下載安裝一下,按照教程,啟動redis服務,應該也不難的,我試過。
第四步:使用phpinfo查看你的PHP是否已經安裝redis的擴展,如果沒有,那么請注意了,你需要安裝redis擴展。具體操作如下:
·使用phpinfo查看你的系統版本以及PHP支持的擴展版本:
要注意幾個地方 X64,TS,VC,以及你的PHP版本,然后去https://windows.php.net/downloads/pecl/releases/redis/ 這個地址找到對應的redis版本,下載,解壓。
或者這個地址:http://pecl.php.net/package/redis
·找到php_redis.dll文件,把它放到你的PHP安裝目錄的ext文件夾下
·編輯php.ini,加入extension=php_redis;這里注意,PHP版本不同有時候寫法不一樣,也有可能是extension=php_redis.dll,這個你根據php.ini中查看類似寫法就好。
·再用phpinfo看一下,發現有redis擴展了,說明裝好了。
第五步:編寫app\queue.php文件,這個文件是自動生成的。
按照這樣設置就行,redis的連接根據你自己的實際情況來。
第六步:在app下新建文件夾job,然后新建一個php文件,這里就是放怎么去處理消息隊列的邏輯,比如新建Job1.php文件
第七步:在任何地方可以將一個數據推入消息隊列:think\facade\Queue::push($job, $data = '', $queue = null)
第八步:在命令行執行:php think queue:listen --queue=<隊列名>來監聽消息隊列,一旦隊列里面有數據,就會啟動消費進程去消費。這里要注意一點,如果你的邏輯處理起來耗時很長,超過了默認的60秒,那么是會報錯的。如果你想要不報錯,可以這樣起命令:php think queue:listen --queue=<隊列名> --timeout=600 (任務執行一次之后還是會一直執行的,可以在代碼開頭加一段這個
if ($job->attempts() == 1) { //這樣任務只會執行一次 $job->delete(); }
第九步:如果你想以守護進程的形式常駐這個隊列的監聽,那么使用supervisor這個我沒試過,試過的小伙伴也可以在評論區補充下怎么使用,大家互相學習!