• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP使用Beanstalkd实例详解

php 搞代码 4年前 (2022-01-21) 31次浏览 已收录 0个评论

有关Beanstalkd的基本概念,编译和yum的安装方法已经在上篇文章《Beanstalkd消息/任务队列的详解》中介绍了,今天练习下PHP使用Beanstalkd的过程,我选择的是使用Pheanstalk类来连接Beanstalkd

1.使用Composer安装Pheanstalk

composer require pda/pheanstalk

2.实现代码

php查看beanstalkd状态脚本Status.php

<?php/** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/21 * Time: 10:32 */require "../vendor/<div style="color:transparent">本&文来源gaodai^.ma#com搞#代!码网</div><strong>搞gaodaima代码</strong>autoload.php";use Pheanstalk\Pheanstalk;$pheanstalk = new Pheanstalk('192.168.75.135',11300);print_r($pheanstalk->stats());

生产者代码Producter.php

<?php/** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/20 * Time: 16:30 */require "../vendor/autoload.php";use Pheanstalk\Pheanstalk;$pheanstalk = new Pheanstalk('192.168.75.135',11300);for ($i=0;$i<50;$i++){    $data = array(        'key' => 'testkey'.$i,        'value' => 'testvalue',        'time' => time(),    );    $ret = $pheanstalk->putInTube('test-tube', json_encode($data), Pheanstalk::DEFAULT_PRIORITY, Pheanstalk::DEFAULT_DELAY, Pheanstalk::DEFAULT_TTR);    var_dump($ret);}

消费者代码Consumer.php

<?php/** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/20 * Time: 16:31 */set_time_limit(0);ini_set('default_socket_timeout', 900);require "../vendor/autoload.php";use Pheanstalk\Pheanstalk;$pheanstalk = new Pheanstalk('192.168.75.135',11300);while (true){    $job = $pheanstalk        ->watch('test-tube')        ->ignore('default')        ->reserve();    if ($job){        sleep(2);        echo $job->getData();        echo "\n";        $pheanstalk->delete($job);    }}

打开命令行/终端窗口,执行生产者,会向tube写入50条任务

PS E:\repository\work\beanstalk> php .\Producter.phpint(101)int(102)int(103)int(104)int(105)int(106)int(107)int(108)int(109)int(110)int(111)int(112)int(113)int(114)......

由此可见,$pheanstalk->putInTube成功后返回的是job的id

查看状态

PS E:\repository\work\beanstalk> php Status.phpPheanstalk\Response\ArrayResponse Object(    [_name:Pheanstalk\Response\ArrayResponse:private] => OK    [storage:ArrayObject:private] => Array        (            [current-jobs-urgent] => 0            [current-jobs-ready] => 50            [current-jobs-reserved] => 0            [current-jobs-delayed] => 0            [current-jobs-buried] => 0            ......

结果中显示处于ready待读取状态的job是50个

打开两个或以上命令行/终端窗口,执行消费者,模拟多消费者竞争

消费者1

PS E:\repository\work\beanstalk> php .\Consumer.php{"key":"testkey0","value":"testvalue","time":1548039103}{"key":"testkey1","value":"testvalue","time":1548039103}{"key":"testkey2","value":"testvalue","time":1548039103}{"key":"testkey4","value":"testvalue","time":1548039103}{"key":"testkey6","value":"testvalue","time":1548039103}{"key":"testkey8","value":"testvalue","time":1548039103}{"key":"testkey10","value":"testvalue","time":1548039103}{"key":"testkey12","value":"testvalue","time":1548039103}{"key":"testkey14","value":"testvalue","time":1548039103}{"key":"testkey16","value":"testvalue","time":1548039103}{"key":"testkey18","value":"testvalue","time":1548039103}{"key":"testkey20","value":"testvalue","time":1548039103}{"key":"testkey22","value":"testvalue","time":1548039103}{"key":"testkey24","value":"testvalue","time":1548039103}{"key":"testkey26","value":"testvalue","time":1548039103}{"key":"testkey28","value":"testvalue","time":1548039103}{"key":"testkey30","value":"testvalue","time":1548039103}{"key":"testkey32","value":"testvalue","time":1548039103}{"key":"testkey34","value":"testvalue","time":1548039103}{"key":"testkey36","value":"testvalue","time":1548039103}{"key":"testkey38","value":"testvalue","time":1548039103}{"key":"testkey40","value":"testvalue","time":1548039103}{"key":"testkey42","value":"testvalue","time":1548039103}{"key":"testkey44","value":"testvalue","time":1548039103}{"key":"testkey46","value":"testvalue","time":1548039103}{"key":"testkey48","value":"testvalue","time":1548039103}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP使用Beanstalkd实例详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址