beanstalkd的簡單使用

注:本文Linux環境只跑Beanstalkd,PHP環境還是在Windows

1.介紹:

Beanstalkd 是一個高性能,輕量級的分佈式內存隊列,最初設計意圖是在高併發的網絡請求下,通過異步執行耗時較多的請求,及時返回結果,減少請求的響應延遲。

2.特性:

  • 優先級(priority):即支持任務插隊功能,可以根據需要設置任務被消費的優先次序。
  • 延遲(delay):可以設置一個時間t,即任務t秒後纔可以被消費者讀取。
  • 持久化(persistent data):會定時將任務刷新到beanstalkd日誌文件中,在服務器宕機等意外發生時,也能保持數據不會丟失。
  • 預留(buried):設爲預留時,消費者暫時無法取出任務,等某個合適時機再拿出來消費。
  • 超時重發(time-to-run):任務必須在指定時間內進行消費,否則就任務消費失敗,會重新進入隊列,給消費者進行消費。

3.安裝:

  • Linux下安裝Beanstalkd(目前只支持Linux系統),執行命令:apt-get install beanstalkd 即可安裝,端口一般爲11300,可通過命令:netstat –ntlp查看所有端口的使用情況
  • 在laravel中安裝擴張包:composer require pda/pheanstalk如果有以下報錯,

則需修改composer.json文件即可“ext-json”: “^1.7”改爲“ext-json”: “^1.6”

 

4.使用:

爲了能讓Windows環境下的PHP連接Linux下的beanstalkd,故需先修改beanstalkd的配置,操作如下:

vim /etc/default/beanstalkd

將BEANSTALKD_LISTEN_ADDR = 127.0.0.1改爲BEANSTALKD_LISTEN_ADDR = 0.0.0.0

同時放開BEANSTALKD_EXTRA,放開此參數可以實現持久化,即斷電可重新讀取隊列信息

修改完成後,執行重啓命令:service beanstalkd restart

然後可以查看beanstalkd的狀態:service beanstalkd status

然後修改beanstalkd.socket的配置,將ListenStream=127.0.0.1:11300修改爲ListenStream=0.0.0.0:11300

同樣重啓一下beanstalkd.socket,但需要先關閉beanstalkd,

然後再開啓beanstalkd.socket和beanstalkd

systemctl stop beanstalkd

systemctl start beanstalkd.socket

systemctl start beanstalkd

 然後查看beanstalkd.socket的狀態

Job的生命週期

Status

Description

ready

等待被取出並處理

reserved

如果job被worker取出,將被此worker預訂,worker將執行此job

delayed

等待一定時間後,狀態變爲ready

buried

等待喚醒,通常job處理失敗時

 

生產者將任務放入隊列中

   $pheanstalk = Pheanstalk::create('192.168.135.133', 11300);

   $pheanstalk->useTube('tube_name')->put('tube',1024,2,60);

通過put()方法將任務插入隊列,第一個參數任務body;第二個參數優先級,0-2^32,值越小優先級越高,默認1024;第三個參數延遲的秒數,在這段時間任務處於延遲的狀態;第四個參數允許執行的最大秒數,如果任務在這段時間內不能被delete、release、bury,那麼任務超時後服務器將release此任務,狀態變爲ready,最小爲1秒。 

消費者從隊列中獲取任務進行

   $pheanstalk = Pheanstalk::create('192.168.135.133', 11300); 
  
   $job = $pheanstalk->watch('tube_name')->ignore('default')->reserve();

   $data= $job->getData();

   $pheanstalk->delete($job); //任務處理完成後,將該任務刪除

5.查看隊列任務的命令行工具:beanstool

  • 安裝:

wget https://github.com/src-d/beanstool/releases/download/v0.2.0/beanstool_v0.2.0_linux_amd64.tar.gz

tar -xvzf beanstool_v0.2.0_linux_amd64.tar.gz

cp beanstool_v0.2.0_linux_amd64/beanstool /usr/local/bin/

  • 常用命令

本文參考:https://www.imooc.com/learn/912https://learnku.com/articles/18687

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章