再了解 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://segmentfault.com/a/1190000014838960?utm_source=channel-hottest
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦