php輕量佇列(4) pheanstalk

2021-09-02 21:00:35 字數 2832 閱讀 4544

[size=x-large] -- 前面的佇列文章 --[/size]

[url=佇列使用php-resque(1)[/url]

[url=佇列使用php-resque(2)[/url]

[url=佇列使用php-resque(3)- by supervisor[/url]

[size=x-large]-- 總體說明 --[/size]

下面是乙個網上的中文的說明

www.fzb.me/2015-7-31-beanstalkd-faq.html

這裡分為我們常見的服務端和客戶端。

服務端是使用人很多的beanstalkd,其實叫做訊息佇列比較合適。

它和我們前面介紹的php-resque差別:

1、php-resque不區分明顯的客戶端和服務端,beanstalkd區分,較符合我們常用的思維方式。

2、php-resque只需安裝redis並執行,而beanstalkd是自己寫的服務端與其他軟體無關,也不需要。

3、php-resque不能持久化,而beanstalkd可以,但實際不用為好,因為太慢。

4、php-resque和beanstalkd都很輕量級,都很容易使用。

5、最重要的php-resque不能使用延時佇列(或者說需要其他元件補充),而beanstalkd可以。

6、php-resque許久不更新了,而beanstalkd在composer上次更新是2023年,好不少。

7、php-resque沒有優先順序,而beanstalkd有優先順序,但我也不用。

8、為了防止某個consumer長時間占用任務但不能處理的情況,beanstalkd為reserve操作設定了timeout時間,如果該consumer不能在指定時間內完成job,job將被遷移回ready狀態,供其他consumer執行。

介紹一下延時佇列,我可以放乙個訊息,但希望該訊息在某個特定時點才真正進入佇列,從而被取出。

而普通的佇列,你放入訊息到佇列裡,就無法控制它,只要它前面沒有別的訊息,它就立刻會被取出。

******************************

服務端說明:

1、乙個訊息有ready, reserved, delayed, buried四種狀態

2、當producer直接put乙個訊息時,訊息就處於ready狀態

3、如果選擇延遲put,訊息就先到delayed狀態,等待時間過後才遷移到ready狀態。任務狀態會從 ready 變為 reserved(預定),其他人就無法獲取。 put 產生訊息的時候,攜帶了 ttr(time to run),如果這個時間內,消費者沒有傳送 delete, release 或者 buried 命令。 任務會自動回到 ready 狀態,其他人可以繼續獲取。(注意:消費者返回 release 命令或者不返回,就回到 ready/delayed 狀態,可以重新被消費!!這可能是我們不希望的)

4、如果獲取了當前ready的訊息後,該訊息的狀態就遷移到reserved,這樣其他的任何程序就不能再操作該訊息。確保唯一使用。

5、buried這個,為防止乙個訊息被呼叫多次,可以使用此介面。

6、程式有乙個delete操作,乙個訊息被delete之後,就完全消失,不屬於上面的4種情況中任何一種,並且,一般來說,就應該在獲取訊息之後對其delete,絕對不可以省略。

beanstalkd的job狀態多樣化,支援任務優先順序 (priority), 延時 (delay), 超時重發 (time-to-run) 和預留 (buried), 能夠很好的支援分布式的後台任務和定時任務處理。

它的內部實現採用 libevent, 伺服器-客戶端之間用類似 memcached 的輕量級通訊協議,因此有很高的效能。

關於服務端使用的記憶體,只取決於佇列大小,不限制。

缺點:無最大記憶體控制, 如果有訊息堆積或者業務使用方式有誤,而導致記憶體暴漲拖垮機器

[size=x-large]-- 服務端安裝 --[/size]

完整安裝步驟,必須是類unix系統。

yum install beanstalkd

service beanstalkd start

上面的寫法,會讀取下列配置檔案。

配置檔案 /etc/sysconfig/beanstalkd

還有一種啟動方法是直接啟動,自己設定引數

當開啟-b啟動持久化後,其會將binlog每隔n秒(n可配置為0)刷入到硬碟,類似redis的aof持久化方式,一般不需要的。

[size=x-large]-- 服務端監控 --[/size]

有很多使用極其簡單,無需安裝。

只要把檔案解壓即可,執行命令

./beanstalkd-cli stats

或者./beanstalkd-cli monitor

但是不太直觀。

[size=x-large]-- 服務端監控的乙個php的web監控控制台,超棒 --[/size]

使用方法,首先,電腦必須按照composer

然後,composer create-project ptrofimov/beanstalk_console -s dev 目標目錄

這個目標目錄通常位於web根目錄下。一句命令就把控制台安裝成功。

然後,開啟瀏覽器

http://網域名稱/目標目錄/public/index.php

神奇的控制台就出現了。

php好棒!

[size=x-large]-- 客戶端安裝 --[/size]

composer安裝

"pda/pheanstalk":"3.1.0"

[size=x-large]-- 客戶端** --[/size]

為簡單,寫乙個檔案裡了,真實專案肯定分開

[size=x-large]-- 瀏覽器輸出 --[/size]

[img]

專案管理的4P

計畫 plan 這是指所有涉及規劃和 的活動。在這個階段,專案或專案的要素尚未實現 過程 processes 專案管理知識體 pmbok,project management body of knowledge 指南中記述,專案主要由一系列預定和結構良好的過程所組成 人員 people 人員是專案動...

基於4P理論做運營

運營可以分為產品運營 內容運營 活動運營 使用者運營 新 運營 社群運營 渠道運營 運營 品類運營和商家運營。那什麼是運營呢,運營就是解決一切使用者存在的問題。網際網路運營和市場營銷本質上都是從目標顧客出發,滿足市場需求,創造企業利益。那既然這樣,運營是屬於市場營銷的一部分。市場營銷的4p理論 產品...

CIO如何運用4P學說服CEO

注 本文 it168 cio是公司it組織序列的中堅力量,兼有領導者與下屬的雙重身份,在帶領下屬完成本部門工作同時也要接受ceo的領導。上擠下壓 兩面受重,責任重大,就是cio處境最好寫照。因此cio位在組織序列的 夾心餅乾 中,在 上擠下壓 的環境中如何游刃有餘地開展工作,營造良好的工作環境,處理...