摘要:后來開源,現在有大規模部署和使用,每天處理百萬級任務。是典型的類設計,協議和使用方式都是同樣的風格,所以使用過的用戶會覺得似曾相識。
Beanstalkd介紹 什么是Beanstalkd
Beanstalk,一個高性能、輕量級的分布式內存隊列系統,最初設計的目的是想通過后臺異步執行耗時的任務來降低高容量Web應用系統的頁面訪問延遲,支持過有9.5 million用戶的Facebook Causes應用。
后來開源,現在有PostRank大規模部署和使用,每天處理百萬級任務。Beanstalkd是典型的類Memcached設計,協議和使用方式都是同樣的風格,所以使用過memcached的用戶會覺得Beanstalkd似曾相識。
job典型的生命周期
put reserve delete -----> [READY] ---------> [RESERVED] --------> *poof*
job可能的狀態遷移
put with delay release with delay ----------------> [DELAYED] <------------. | | kick | (time passes) | | | put v reserve | delete -----------------> [READY] ---------> [RESERVED] --------> *poof* ^ ^ | | | release | | | `-------------" | | | | kick | | | | bury | [BURIED] <---------------" | | delete `--------> *poof*Beanstalkd安裝
安裝略過,如需請參考 點擊參考
注:需要安裝Composer,教程鏈接 Composer安裝方法Pheanstalk安裝
用于操作Beanstalkd 的PHP 第三方庫,安裝略過,如需請參考 點擊參考
Pheanstalk操作 連接Beanstalkd Beanstalkd狀態方法Beanstalkd狀態
$stats = $pheanstalk->stats();
返回:
PheanstalkResponseArrayResponse Object ( [_name:PheanstalkResponseArrayResponse:private] => OK [storage:ArrayObject:private] => Array ( [current-jobs-urgent] => 0 //當前存在優先級的任務數 [current-jobs-ready] => 0 //當前準備就緒的任務數 [current-jobs-reserved] => 0 //當前處于阻塞的任務數 [current-jobs-delayed] => 0 //當前處于延遲狀態的任務數 [current-jobs-buried] => 0 //當前預留的任務數 [cmd-put] => 0 //cmd命令為累計運行次數 [cmd-peek] => 0 [cmd-peek-ready] => 0 [cmd-peek-delayed] => 0 [cmd-peek-buried] => 0 [cmd-reserve] => 0 [cmd-reserve-with-timeout] => 0 [cmd-delete] => 0 [cmd-release] => 0 [cmd-use] => 0 [cmd-watch] => 0 [cmd-ignore] => 0 [cmd-bury] => 0 [cmd-kick] => 0 [cmd-touch] => 0 [cmd-stats] => 1 [cmd-stats-job] => 0 [cmd-stats-tube] => 0 [cmd-list-tubes] => 3 [cmd-list-tube-used] => 0 [cmd-list-tubes-watched] => 0 [cmd-pause-tube] => 0 [job-timeouts] => 0 //超時的任務 [total-jobs] => 0 //任務總數 [max-job-size] => 65535 //任務字符串大小 [current-tubes] => 1 //當前的管道數 [current-connections] => 1 //當前打開的連接數 [current-producers] => 0 //當前生產者數量 [current-workers] => 0 //當前消費者數量 [current-waiting] => 0 //發出reserved指令,但沒有響應的數量 [total-connections] => 4 //累計鏈接數量 [pid] => 530 //Beanstalkd進程id [version] => 1.10 [rusage-utime] => 0.003545 [rusage-stime] => 0.007473 [uptime] => 105855 //運行時間(秒) [binlog-oldest-index] => 0 [binlog-current-index] => 0 [binlog-records-migrated] => 0 [binlog-records-written] => 0 [binlog-max-size] => 10485760 [id] => 4199e3eca8bfdea8 [hostname] => lmmlwendeMacBook-Air.local ) )
當前的管道列表
$listTubes = $pheanstalk->listTubes();
查看管道的詳細信息
$stats = $pheanstalk->statsTube();
返回:
PheanstalkResponseArrayResponse Object ( [_name:PheanstalkResponseArrayResponse:private] => OK [storage:ArrayObject:private] => Array ( [name] => default //當前管道名 [current-jobs-urgent] => 0 //當前管道存在優先級的任務數 [current-jobs-ready] => 0 //當前管道準備就緒的任務書 [current-jobs-reserved] => 0 //當前管道處于阻塞的任務數 [current-jobs-delayed] => 0 //當前管道處于延遲狀態的任務數 [current-jobs-buried] => 0 //當前管道預留的任務數 [total-jobs] => 0 //當前管道總任務數 [current-using] => 1 //當前管道生產者數量 [current-watching] => 1 //當前管道消費者數量 [current-waiting] => 0 //發出reserved指令,但沒有響應的數量 [cmd-delete] => 0 [cmd-pause-tube] => 0 [pause] => 0 [pause-time-left] => 0 ) )
查看任務的詳細信息
$job = $pheanstalk->watch("default")->reserve(); $job_stats = $pheanstalk->statsJob($job);
返回:
PheanstalkResponseArrayResponse Object ( [_name:PheanstalkResponseArrayResponse:private] => OK [storage:ArrayObject:private] => Array ( [id] => 1 //任務job ID [tube] => test //所處管道 [state] => reserved //當前狀態 [pri] => 1024 //任務優先級(默認1024) [age] => 469 //任務存活時間(秒) [delay] => 0 //任務延遲時間(秒) [ttr] => 60 //任務執行時間 [time-left] => 59 //任務在reserve狀態維持的秒數 [file] => 0 // binlog-4 默認-0 [reserves] => 2 //總共reserve次數 [timeouts] => 0 //任務超時次數 [releases] => 0 //重設任務次數 [buries] => 0 //預留次數 [kicks] => 0 //釋放預留任務次數 ) )
查看任務的詳細信息(通過ID)
$job = $pheanstalk->peek(1); $job_stats = $pheanstalk->statsJob($job);Beanstalkd生產者方法
指定需要使用的管道
$tube = $pheanstalk->useTube("default");
向管道插入數據
$tube = $pheanstalk->useTube("default"); $put = $tube->put( "hello, beanstalk", // 任務內容 1024, // 任務的優先級 10, // 不等待直接放到ready隊列中 60 // 處理任務的時間 );
或者:
$pheanstalk->putInTube("default", "test1", 1024, 10, 60);Beanstalkd消費者方法
監聽管道
$tube = $pheanstalk->watch("user");
去除不需要監聽的管道
$tube = $pheanstalk->watch("user")->ignore("default");
以堵塞的方式監聽管道
$job = $pheanstalk->watch("user")->reserve(4); //堵塞時間為4秒
列出所有已經監聽的管道
$pheanstalk->listTubesWatched();
watch + reserve 方法
$pheanstalk->reserveFromTube("default")
刪除當前任務
$job = $pheanstalk->watch("default")->reserve(); $pheanstalk->delete($job);
將當前任務重新放入管道
$job = $pheanstalk->watch("default")->reserve(); $pheanstalk->release($job);
為任務續命(當處理任務的時間小于當前任務執行時間時)
$job = $pheanstalk->watch("default")->reserve(); $pheanstalk->touch($job); //TODO
將任務預留
$job = $pheanstalk->watch("default")->reserve(); $pheanstalk->bury($job);
將預留任務釋放(變為reday狀態)
$job = $pheanstalk->peekBuried("default"); $pheanstalk->kickJob($job);
批量將預留任務釋放
$pheanstalk->userTube("default")->kick(999); //將id小于999的預留任務全部釋放
讀取當前準備就緒的任務(ready)
$job = $pheanstalk->peekReady("default");
讀取當前處于延遲狀態的任務(delayed)
$job = $pheanstalk->peekDelayed("default");
對管道設置延遲
$pheanstalk->pauseTube("default", 100); //設置100秒延遲
取消對管道的延遲
$pheanstalk->resumeTube("default");
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28870.html
摘要:的消費者,通過命令來獲取或改變的狀態。不再維持這些消息。持久化可以通過將及其狀態記錄到文件里面,在下次啟動時可以通過讀取來恢復之前的及狀態。 一、安裝 1、官網 https://kr.github.io/beanstalkd/ 2、安裝 yum install beanstalkd --enablerepo=epel 3、啟動 /usr/bin/beanstalkd -l 0.0.0....
摘要:說明隊列配置文件存放在。每一種隊列驅動的配置都可以在該文件中找到,包括數據庫,,,,以及同步本地使用驅動。其中還包含了一個隊列驅動用于那些放棄隊列的任務。 showImg(https://segmentfault.com/img/remote/1460000012384126?w=888&h=280); 說明 隊列配置文件存放在 config/queue.php。 每一種隊列驅動的配...
摘要:項目地址框架目的基于和實現多進程處理消息隊列。文件用于配置消息隊列管道及其處理類項目配置文件文件夾下為方式運行下產生的日志內容是運行時的進程信息命令查看的狀態信息查看的信息啟動啟動停止重啟其它子進程異常退出時將會自動重啟。 項目地址 SWBT框架 https://github.com/YWNA/SWBT 目的 基于Swoole和beanstalkd實現多進程處理消息隊列。 安裝 com...
摘要:幾小時前剛剛發布的為隊列功能提供了官方原生的驅動器,完全取代了本軟件包的功能。不過這也并不意味著就是虛擬主機沒戲,必須云主機起跳的小網站殺手。性能確實低下受制于,絕對禁止用于大數量高密度任務的場合。虛擬主機肯定不會提供。 幾小時前剛剛發布的 Larevel 5.0 為隊列功能提供了官方原生的database驅動器,完全取代了本軟件包的功能。 對于Laravel 5及以上版本,本文的內...
摘要:上一篇文章講了通道建議先去看上篇文章與把隊列添加到數據表中把隊列添加到內存中安裝依賴安裝到項目根目錄修改訪問路由數據將寫入到內存中執行命令打開日志文件打印的消息完結下一篇文章講能更直觀的看到數據添加到內存中 上一篇文章講了 database 通道 建議先去看上篇文章 1.beanstalkd 與 database database:把隊列添加到數據表中beanstalkd:把隊列添加到...
閱讀 1974·2021-11-22 19:20
閱讀 2618·2021-11-22 13:54
閱讀 1932·2021-09-04 16:40
閱讀 1814·2021-08-13 11:54
閱讀 2629·2019-08-30 15:55
閱讀 3456·2019-08-29 13:51
閱讀 519·2019-08-29 11:09
閱讀 2997·2019-08-26 14:06