beanstalkd從入門到 精通(手動滑機)

安裝

yum instll -y beanstalkd

php中如何使用呢
pheanstalk
安裝了composer(可以使用yum進行安裝)之後,如果你的服務器所在的網絡環境在國內的話還是需要配置國的的composer源。

composer config -g repo.packagist composer https://packagist.phpcomposer.com

參考
一、小例子
beanstalked.php

<?php 
    require '/root/beanstalkd/vendor/autoload.php';
    use Pheanstalk\Pheanstalk;
    return new Pheanstalk('127.0.0.1',11300);
?>

product.php

<?php 
    $pheanstalk=require './beanstalked.php';
    $pheanstalk->useTube('zhengchengjun')->put(666);
 ?>

consumer.php

<?php 
    $pheanstalk=require './beanstalked.php';
    while (true) {
        $job=$pheanstalk->watch('zhengchengjun')->reserve();
        echo($job->getData());
        $pheanstalk->delete($job);
    }
 ?>

二、pheanstalk的使用方法
1.stats() 查看隊列(由管道組成)狀態

<?php 
    $pheanstalk=require './beanstalked.php';
    print_r($pheanstalk->stats());
 ?>

2.listTubes() 查看當前所有管道

<?php 
    $pheanstalk=require './beanstalked.php';
    print_r($pheanstalk->listTubes());
 ?>

3.statsTube(tubeName) 查看指定管道信息

<?php 
    $pheanstalk=require './beanstalked.php';
    print_r($pheanstalk->statsTube('default'));
 ?>

4.useTube(tubeName) 指定管道,管道存在就添由put添加job,管道不存在就新建這個管道再添加job
put(Job, [priority],delay) 添加任務至管道
delay多少秒後給才允許消費者消費,此時這個Job處於delay狀態。可以用statusTube來進行查看。

<?php 
    $pheanstalk=require './beanstalked.php';
    $pheanstalk->useTube('newUsers')->put('test');
    print_r($pheanstalk->statsTube('newUsers'));
 ?>

5.watch(tubeName) 設置要監聽的管道,可以同時設置多個
reserve([time]) 以阻塞的方式監聽管道,可以設置阻塞時間,不設置默認永久 statusjob()查看job的相關信息

<?php 
    $pheanstalk=require './beanstalked.php';
    $job=$pheanstalk->watch('newUsers')->reserve();
    $stats=$pheanstalk->statsJob($job);
    print_r($stats);
 ?>

job信息裏有它的狀態和job id還有一些相關信息,ttr是最大允許在reverse的時間。超過這個時間沒有處理這個job。狀態就會重新設置爲ready。file是可以把你的隊列數據進行二進制存儲。要開啓。reservers key的含意是,一個job超過了ttr所設置的時間,沒有經過你的處理默認返回到了ready狀態。你又把他的狀態設爲reserved。來回兩種狀態的次數。timeouts是超時次數。buries進入預留狀態的次數。kicks從預留到時ready狀態的次數。
6.peek(job id根據job id得到job信息

<?php 
    $pheanstalk=require './beanstalked.php';
    $job=$pheanstalk->peek(4);
    $stats=$pheanstalk->statsJob($job);
    print_r($stats);
 ?>

7.putInTube(tubename,jobcontent,prifily)

<?php 
    $pheanstalk=require './beanstalked.php';
    //下面兩個job設置的優先級不一樣
    //值越小優先級越大,優先級越大越先被消費者調用
    $pheanstalk->putInTube('newUsers',66668,1000);
    $pheanstalk->useTube('newUsers')->put(66661,10);
 ?>

可以使用以下代碼來測試優先級

<?php 
    $pheanstalk=require './beanstalked.php';
    $job=$pheanstalk->watch('newUsers')->reserve();
    print_r($job);
    //讓這個job gg
    $pheanstalk->delete($job);
 ?>

8.listTubesWatced()列出監聽的管道。ignore從監聽的管道中移除。

    $pheanstalk=require './beanstalked.php';
    $job=$pheanstalk->watch('newUsers')
                    ->watch('default')
                    ->ignore('default');
    $tubes=$pheanstalk->listTubesWatched();
    print_r($tubes);

8.release(job,[proifly(優先級)],[delay])把job的狀態更改爲ready
在一個模塊出錯的時候,我們應要把這個job放到重新放到管道中而不是刪除。

<?php
    $pheanstalk=require './beanstalked.php';
    $pheanstalk->useTube('newUsers')->put('member_1');
    $job=$pheanstalk->watch('newUsers')->reserve();
    $module=false;
    if(!$module){
            //30秒後job會從reserve狀態變成ready狀態
            sleep(30);
            $pheanstalk->release($job);
    }else{
            $pheanstalk->delete($job);
    }
 ?>

8.bury()把這個job的狀態設置爲buired

<?php
    $pheanstalk=require './beanstalked.php';
    $job=$pheanstalk->useTube('newUsers')->reserve();
    sleep(20);
    //把這個job的狀態設置爲buired,就比如說此時你的郵件服務器涼了,
    //就要把這個任務的狀態設置爲buired,等到你的郵件服務器恢復正常了,就把這個job設爲ready,交給消息費進行處理就好了。
    $pheanstalk->bury($job);
 ?>

9.peekBuried(‘tubeName’)查看指定管道buired狀態的job,kickJob(Job)把一個job的狀態從buired變成ready,kick(num(一個數字)),所有job id小於這個數字的job都會由buired狀態變成ready狀態。

<?php
    $pheanstalk=require './beanstalked.php';
    //或者這樣$pheanstalk->userTube('newUsers')->kick(999),只要這一行就行
    //下面的代碼可以不理會
    $job=$Pheanstalk->peekBuried('newUsers');
    var_dump($pheanstalk->statsJob($job));
    $pheanstalk->kickJob($job);
    var_dump($pheanstalk->statsJob($job))
 ?>

10.peekReady(),peekDelayed()分別是讀取指定管道ready狀態的job或者delay狀態的job

<?php
    $pheanstalk=require './beanstalked.php';
    $job=$pheanstalk->PeekReady('newUsers');
    //$job=$pheanstalk->PeekDelayed('newUsers');
    var_dump($job);
 ?>

11。pauseTube,resumeTube

<?php
    $pheanstalk=require './beanstalked.php';
    //整個管道延遲20秒
    $pheanstalk->pauseTube('newUsers',20);
    //讓管道的延遲取消 延遲的意思就是消息者要過了指定的時間纔可以消費
    //$pheanstalk->resumeTube('newUsers');
 ?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章