PHP操作Beanstalkd队列(2)生产者与消费者

PHP操作Beanstalkd队列(1)安装与基础

再了解 Beanstalkd 的基本概念和使用方法,并成功安装后,可以进入实战环节

二话不说,运行我们 Beanstalkd 后,先创建demo.php文件,并使用 composer 引入 pda/pheanstalk 操作类

    require './vendor/autoload.php'; 
    $p = new \Pheanstalk\Pheanstalk('127.0.0.1',11300); 
复制代码

使用生产者 putInTube 方法向队列添加任务

#参数顺序为1.管道名 2.内容 3.优先级 4.延迟秒数 5.超时时间秒速 超时重发(默认60s)
#向 newUsers 管道 添加内容为 text 优先级为1000 延迟20s 操作时间为30s的任务
$p->putInTube('newUsers','text',1000,20,30);
复制代码

使用生产者 put 方法向队列添加任务

#与 putInTube 方法不同,先选择了管道,在添加任务,参数与 putInTube 相同
$tube = $p->useTube('newUsers')
$tube->put('text1',1000);
$tube->put('text2',1000);
复制代码

使用消费者方法获取管道信息

#watch()监听管道
#reserve()获取任务,无法读取bury状态任务,是阻塞方法,无任务时程序会一直阻塞,直到有新任务出现,可以添加阻塞时间,单位s,如reserve(2)
$job = $p->watch('newUsers')->reserve();
$job->getData(); #获取任务内容
~ #执行处理逻辑
$p->delete() #删除任务 
复制代码

若处理逻辑时间过长,任务将会被重新放回管道中,可以用 touch 方法延迟处理时间

$job = $p->watch('newUsers')->reserve();
$p->touch($job);
复制代码

当这个任务不符合处理要求时,可以用 release 方法将它放回管道,重设为 ready 状态

$job = $p->watch('newUsers')->reserve();
$p->release($job);
复制代码

如果此任务是当前不处理任务,可以使用 bury 方法将它改为预留任务,放置一旁

$job = $p->watch('newUsers')->reserve();
$p->bury($job);

#读取预留任务
$job = $p->peekBuried('newUsers');
#将任务变回ready状态
$p->kickJob($job);

#批量处理预留任务 将id小于999的任务都变成ready状态
$p->useTube('newUsers')->kick(999);
复制代码

只获取对应状态的任务 peek

#获取ready状态任务
$job = $p->peekReady('newUsers');
#读取Delayed状态任务
$p->peekDelayed('newUsers');
复制代码

reserve是阻塞的 peek是没阻塞,当获取不到任务将抛出异常

#同时监听多个管道
$p->watch('newUsers')->watch('default');
#被监听的管道
$p->listTubesWatched();
#不监听此管道
$p->ignore('default')
复制代码
#给管道设置延迟
$p->pauseTube('newUsers',100);
#取消延迟
$p->resumeTube('newUsers');
复制代码

转载于:https://juejin.im/post/5b003923518825429d1f90ef

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值