小 巧 快訊息佇列元件beanstalkd

2021-08-18 03:09:47 字數 3507 閱讀 7732

1、beanstalkd是什麼?

beanstalkd是乙個高效能,輕量級的分布式記憶體佇列

2、beanstalkd特性

支援優先順序(支援任務插隊)

延遲(實現定時任務)

持久化(定時把記憶體中的資料刷到binlog日誌)

預留(把任務設定成預留,消費者無法取出任務,等某個合適時機再拿出來處理)

任務超時重發(消費者必須在指定時間內處理任務,如果沒有則認為任務失敗,重新進入佇列)

上面介紹那麼多個特性中,跟redis或者mysql中實現的訊息佇列的方法比較,其中最大特點就是可以實現優先順序,還有定時執行

1、系統環境centos6

rpm -uvh 

.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

#安裝額外的庫

yum install beanstalkd --enablerepo=epel

2、啟動beanstalkd
/usr/bin/beanstalkd -l

0.0.0

.0-p

11300

-b /var/lib/beanstalkd/binlog -f

1、安裝composer
> curl -ss  | php

> mv composer.phar /usr/local/bin/composer

#牆內配置下源

>composer config -g repo.packagist composer

.com

> composer require pda/pheanstalk

2、常用方法

2.1、維護方法

stats

() 檢視狀態方法

listtubes

() 目前存在的管道

listtubeswatched

() 目前監聽的管道

statstube

() 管道的狀態

usetube

() 指定使用的管道

statsjob

() 檢視任務的詳細資訊

peek

() 通過任務id獲取任務

2.2、生產者方法
putintube

() 往管道中寫入資料

put() 配合usetube

()使用

2.3、消費者方法
watch

() 監聽管道,可以同時監聽多個管道

ignore

() 不監聽管道

reserve

() 以阻塞方式監聽管道,獲取任務

reservefromtube

()release

() 把任務重新放回管道

bury

() 把任務預留

peekburied

() 把預留任務讀取出來

kickjob

() 把buried狀態的任務設定成ready

kick

() 批量把buried狀態的任務設定成ready

peekready

() 把準備好的任務讀取出來

peekdelayed

() 把延遲的任務讀取出來

pausetube

() 給管道設定延遲

resumetube

() 取消管道延遲

touch

() 讓任務重新計算ttr時間,給任務續命

3、具體簡單使用

檢視資訊,新建info.php

<?php 

require

'./vendor/autoload.php';

usepheanstalk\pheanstalk;

$p = new pheanstalk('127.0.0.1', 11300);

//檢視beanstalkd當前的狀態資訊

var_dump($p->stats());

結果:

生產者producer.php**如下:

<?php 

require

'./vendor/autoload.php';

usepheanstalk\pheanstalk;

//建立乙個pheanstalk物件

$p = new pheanstalk('127.0.0.1', 11300);

$data = array(

'id' => 1,

'name' => 'test',

);//向userreg管道中新增任務,返回任務id

//put()方法有四個引數

//第乙個任務的資料

//第二個任務的優先順序,值越小,越先處理

//第三個任務的延遲

//第四個任務的ttr超時時間

$id = $p->usetube('userreg')->put(json_encode($data));

//獲取任務

$job = $p->peek($id);

//檢視任務狀態

print_r($p->statsjob($job));

結果:

消費者consumer.php**如下:

<?php 

require

'./vendor/autoload.php';

use pheanstalk\pheanstalk;

//建立乙個pheanstalk物件$p=

new pheanstalk('127.0.0.1', 11300);

//監聽userreg管道,忽略default管道

$job=$p

->watch('userreg')->ignore('default')->reserve();

$data

= json_decode($job

->getdata());

//列印任務中的資料

print_r($data);

//最後刪除任務,表示任務處理完成

$p->delete($job);

結果:

參考:官網

中文文件

beanstalkd分享pdf文件

初步使用小 巧 快訊息佇列元件beanstalkd

1 beanstalkd是什麼?beanstalkd是乙個高效能,輕量級的分布式記憶體佇列,當你用過memcache,你會有種熟悉感覺,因為它是類似 memcached 的輕量級通訊協議,具有有很高的效能 2 beanstalkd特性 支援優先順序 支援任務插隊 延遲 實現定時任務 持久化 定時把記...

訊息佇列 訊息佇列

輪詢排程 一次性分發所有訊息,保證訊息平均分配,不管消費者是否能正常消費 訊息應答 保證消費端能確實消費,不丟失 公平 乙個乙個分發所有訊息,在保證分發到的執行緒確認回覆後,才分發下個訊息給下個空閒的消費者,訊息持久化 保證佇列中的訊息不丟失,包括3要素 交換器 訊息佇列 訊息都必須宣告持久化 發布...

訊息佇列 訊息佇列 kafka

kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...