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

2021-08-17 17:26:43 字數 3646 閱讀 6456

1、beanstalkd是什麼?

beanstalkd是乙個高效能,輕量級的分布式記憶體佇列,當你用過memcache,你會有種熟悉感覺,因為它是類似 memcached 的輕量級通訊協議,具有有很高的效能

2、beanstalkd特性

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

延遲(實現定時任務)

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

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

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

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

1、系統環境centos7

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

3、後台啟動
beanstalkd -l 位址 -p 埠號 -z 最大的任務大小(byte) -c

&

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是乙個高效能,輕量級的分布式記憶體佇列 2 beanstalkd特性 支援優先順序 支援任務插隊 延遲 實現定時任務 持久化 定時把記憶體中的資料刷到binlog日誌 預留 把任務設定成預留,消費者無法取出任務,等某個合適時機再拿出來處理 任務超時...

訊息佇列 一 初步了解

佇列的本質生產端public class product 如果不再傳送訊息,關閉producer例項。producer.shutdown 消費端public class consumer 啟動消費者例項 consumer.start system.out.printf consumer starte...

訊息佇列的元件

常用訊息佇列 1.activemq 2.rabbitmq 3.kafka 4.rocketmq 阿里巴巴訊息中介軟體,支援事務,未開源 目的 優勢 流量肖鋒 任務非同步處理解耦 rabbitmq元件 broker 簡單來說就是訊息佇列伺服器實體。exchange queue 訊息佇列載體,每個訊息都...