Beanstalkd队列的使用方法

发布时间:2021-06-30 16:55:53 作者:chen
来源:亿速云 阅读:131

本篇内容主要讲解“Beanstalkd队列的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Beanstalkd队列的使用方法”吧!

安装
  1. 官网:https://kr.github.io/beanstalkd/

  2. 安装(也可以采用composer进行安装)

yum install beanstalkd --enablerepo=epel

或者

 composer require pda/pheanstalk
  1. 启动(0.0.0.0可以运行任何ip进行连接)

    /usr/bin/beanstalkd -l 0.0.0.0 -p 11300 -b /var/lib/beanstalkd/binlog -F

     

    -b 开启binlog,断电后重启会自动恢复任务。

  2. 配置文件

/etc/sysconfig/beanstalkd
基本概念

  1. Beanstalkd设计里面的核心概念:

  2. job 的生命周期

Beanstalkd队列的使用方法

当producer直接put一个job时,job就处于READY状态,等待consumer来处理,如果选择延迟put,job就先到DELAYED状态,等待时间过后才迁移到READY状态。

consumer获取了当前READY的job后,该job的状态就迁移到RESERVED,这样其他的consumer就不能再操作该job。当consumer完成该job后,可以选择delete, release或者bury操作;delete之后,job从系统消亡,之后不能再获取;release操作可以重新把该job状态迁移回READY(也可以延迟该状态迁移操作),使其他的consumer可以继续获取和执行该job;有意思的是bury操作,可以把该job休眠,等到需要的时候,再将休眠的job kick回READY状态,也可以delete BURIED状态的job。

正是有这些有趣的操作和状态,才可以基于此做出很多意思的应用,比如要实现一个循环队列,就可以将RESERVED状态的job休眠掉,等没有READY状态的job时再将BURIED状态的job一次性kick回READY状态。

一些特性

任务 (job) 可以有 0~2^32 个优先级, 0 代表最高优先级,默认优先级为1024。

可以通过binlog将job及其状态记录到文件里面,在Beanstalkd下次启动时可以通过读取binlog来恢复之前的job及状态。

分布式设计和Memcached类似,beanstalkd各个server之间并不知道彼此的存在,都是通过client来实现分布式以及根据tube名称去特定server获取job。

Client Libraries For PHP

项目地址:https://github.com/pda/pheanstalk/

  1. Producer 示例:向队列中添加job

$pheanstalk = new Pheanstalk_Pheanstalk('127.0.0.1');

$pheanstalk ->useTube('tubeName') ->put($jobData);
  1. Consumer 示例:从队列中取出job

$job = $pheanstalk ->watch('tubeName') ->ignore('default') ->reserve();

echo $job->getData();

$pheanstalk->delete($job);
  1. 检查服务状态

$isAlive = $pheanstalk->getConnection()->isServiceListening(); //返回 true 或 false
4、获取某一 tube 的数据
try{
    $tubeStatus = $pheanstalk->statsTube('tubeName');
} catch (Exception $e){
    if($e->getMessage()=='Server reported NOT_FOUND'){     //tube 不存在
        $current_jobs_ready = 0;
    }
}

到此,相信大家对“Beanstalkd队列的使用方法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. python线程队列中PriorityQueue的使用方法
  2. PHP使用Beanstalkd的案例

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

beanstalkd

上一篇:PHP中钩子机制的原理是什么

下一篇:php中怎么抓取不带后缀的图片

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》