中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在PHP中使用Beanstalkd消息隊列

發布時間:2021-03-20 16:53:42 來源:億速云 閱讀:156 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關怎么在PHP中使用Beanstalkd消息隊列,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、Beanstalkd是什么?

Beanstalkd是一個高性能,輕量級的分布式內存隊列

二、Beanstalkd特性

1、支持優先級(支持任務插隊)
2、延遲(實現定時任務)
3、持久化(定時把內存中的數據刷到binlog日志)
4、預留(把任務設置成預留,消費者無法取出任務,等某個合適時機再拿出來處理)
5、任務超時重發(消費者必須在指定時間內處理任務,如果沒有則認為任務失敗,重新進入隊列)

三、Beanstalkd核心元素

生產者 -> 管道(tube) -> 任務(job) -> 消費者

Beanstalkd可以創建多個管道,管道里面存了很多任務,消費者從管道中取出任務進行處理。

四、任務job狀態

delayed 延遲狀態
ready 準備好狀態
reserved 消費者把任務讀出來,處理時
buried 預留狀態
delete 刪除狀態

怎么在PHP中使用Beanstalkd消息隊列

五、安裝Beanstalkd

http://kr.github.io/beanstalkd/download.html

下載beanstalkd-1.10.tar.gz

> tar -xf beanstalkd-1.10.tar.gz
> cd beanstalkd-1.10
> make

查看beanstalkd參數信息

> ./beanstalkd -h

啟動beanstalkd

> ./beanstalkd -l 127.0.0.1 -p 11300 -b /data/beanstalkd/binlog &

-b表示開啟binlog,斷電后重啟自動恢復任務  

六、下載Pheanstalk類

首先安裝composer

> curl -sS https://getcomposer.org/installer | php
> mv composer.phar /usr/local/bin/composer
> composer require pda/pheanstalk

 編寫一個簡單腳本查看信息

<?php
require './vendor/autoload.php';

use Pheanstalk\Pheanstalk;

$p = new Pheanstalk('127.0.0.1', 11300);
//查看beanstalkd當前的狀態信息
var_dump($p->stats());

七、Pheanstalk使用方法

維護方法

stats() 查看狀態方法
listTubes() 目前存在的管道
listTubesWatched() 目前監聽的管道
statsTube() 管道的狀態
useTube() 指定使用的管道
statsJob() 查看任務的詳細信息
peek() 通過任務ID獲取任務

生產者方法

putInTube() 往管道中寫入數據
put() 配合useTube()使用

消費者方法

watch() 監聽管道,可以同時監聽多個管道
ignore() 不監聽管道
reserve() 以阻塞方式監聽管道,獲取任務
reserveFromTube() 
release() 把任務重新放回管道
bury() 把任務預留
peekBuried() 把預留任務讀取出來
kickJob() 把buried狀態的任務設置成ready
kick() 批量把buried狀態的任務設置成ready
peekReady() 把準備好的任務讀取出來
peekDelayed() 把延遲的任務讀取出來
pauseTube() 給管道設置延遲
resumeTube() 取消管道延遲
touch() 讓任務重新計算ttr時間,給任務續命

生產者producer.php代碼如下:

<?php
require './vendor/autoload.php';

use Pheanstalk\Pheanstalk;

//創建一個Pheanstalk對象
$p = new Pheanstalk('192.168.1.222', 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('192.168.1.222', 11300);

//監聽userReg管道,忽略default管道
$job = $p->watch('userReg')->ignore('default')->reserve();

$data = json_decode($job->getData());
//打印任務中的數據
print_r($data);

//最后刪除任務,表示任務處理完成
$p->delete($job);

以上就是怎么在PHP中使用Beanstalkd消息隊列,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

治县。| 维西| 会东县| 衢州市| 巩义市| 遂宁市| 马关县| 璧山县| 红安县| 新宁县| 公安县| 长海县| 吉隆县| 稷山县| 隆子县| 黎城县| 云梦县| 康定县| 阿巴嘎旗| 琼海市| 崇信县| 南川市| 陇西县| 徐州市| 卢氏县| 盐津县| 巴塘县| 兴仁县| 连南| 永宁县| 尚义县| 页游| 富平县| 拉孜县| 中方县| 铜山县| 普陀区| 密云县| 北辰区| 陆河县| 祁门县|