资讯专栏INFORMATION COLUMN

Beanstalkd 使用记录

yearsj / 2349人阅读

摘要:的消费者,通过命令来获取或改变的状态。不再维持这些消息。持久化可以通过将及其状态记录到文件里面,在下次启动时可以通过读取来恢复之前的及状态。

一、安装 1、官网

https://kr.github.io/beanstalkd/

2、安装
yum install beanstalkd --enablerepo=epel
3、启动
/usr/bin/beanstalkd -l 0.0.0.0 -p 11300 -b /var/lib/beanstalkd/binlog -F

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

4、配置文件
/etc/sysconfig/beanstalkd
二、基本概念 1、Beanstalkd设计里面的核心概念:

job:一个需要异步处理的任务,是 Beanstalkd 中的基本单元,需要放在一个 tube 中。

tube:一个有名的任务队列,用来存储统一类型的 job,是 producer 和 consumer 操作的对象。

producer:Job 的生产者,通过 put 命令来将一个 job 放到一个 tube 中。

consumer:Job的消费者,通过 reserve/release/bury/delete 命令来获取 job 或改变 job 的状态。

2、job 的生命周期

当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状态。

READY - 需要立即处理的任务,当延时 (DELAYED) 任务到期后会自动成为当前任务;

DELAYED - 延迟执行的任务, 当消费者处理任务后, 可以用将消息再次放回 DELAYED 队列延迟执行;

RESERVED - 已经被消费者获取, 正在执行的任务。Beanstalkd 负责检查任务是否在 TTR(time-to-run) 内完成;

BURIED - 保留的任务: 任务不会被执行,也不会消失,除非有人把它 "踢" 回队列;

DELETED - 消息被彻底删除。Beanstalkd 不再维持这些消息。

3、一些特性 优先级

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

持久化

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

分布式容错

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

超时控制

为了防止某个consumer长时间占用任务但不能处理的情况,Beanstalkd为reserve操作设置了timeout时间,如果该consumer不能在指定时间内完成job,job将被迁移回READY状态,供其他consumer执行。

三、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);
2、Consumer 示例:从队列中取出job
$job = $pheanstalk ->watch("tubeName") ->ignore("default") ->reserve();

echo $job->getData();

$pheanstalk->delete($job);
3、检查服务状态
$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;
    }
}
四、其他 1、PHP 版控制台

https://github.com/ptrofimov/beanstalk_console

2、Chrome 插件

https://chrome.google.com/webstore/detail/beanstalkd-dashboard/dakkekjnlffnecpmdiamebeooimjnipm

五、参考资料

https://github.com/kr/beanstalkd/wiki/faq

http://csrd.aliapp.com/?p=1201

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30247.html

相关文章

  • Laravel队列小结

    摘要:说明队列配置文件存放在。每一种队列驱动的配置都可以在该文件中找到,包括数据库,,,,以及同步本地使用驱动。其中还包含了一个队列驱动用于那些放弃队列的任务。 showImg(https://segmentfault.com/img/remote/1460000012384126?w=888&h=280); 说明 队列配置文件存放在 config/queue.php。 每一种队列驱动的配...

    MoAir 评论0 收藏0
  • PHP 操作 Beanstalkd 方法及参数注释

    摘要:后来开源,现在有大规模部署和使用,每天处理百万级任务。是典型的类设计,协议和使用方式都是同样的风格,所以使用过的用户会觉得似曾相识。 Beanstalkd介绍 什么是Beanstalkd Beanstalk,一个高性能、轻量级的分布式内存队列系统,最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟,支持过有9.5 million用户的Facebook ...

    孙淑建 评论0 收藏0
  • Laravel 队列 --- beanstalkd 驱动

    摘要:上一篇文章讲了通道建议先去看上篇文章与把队列添加到数据表中把队列添加到内存中安装依赖安装到项目根目录修改访问路由数据将写入到内存中执行命令打开日志文件打印的消息完结下一篇文章讲能更直观的看到数据添加到内存中 上一篇文章讲了 database 通道 建议先去看上篇文章 1.beanstalkd 与 database database:把队列添加到数据表中beanstalkd:把队列添加到...

    Lycheeee 评论0 收藏0
  • SWBT基于beanstalkd实现多进程处理消息队列的框架

    摘要:项目地址框架目的基于和实现多进程处理消息队列。文件用于配置消息队列管道及其处理类项目配置文件文件夹下为方式运行下产生的日志内容是运行时的进程信息命令查看的状态信息查看的信息启动启动停止重启其它子进程异常退出时将会自动重启。 项目地址 SWBT框架 https://github.com/YWNA/SWBT 目的 基于Swoole和beanstalkd实现多进程处理消息队列。 安装 com...

    XanaHopper 评论0 收藏0
  • [译] Laravel 5 之美 - 2) 安装运行时必要软件和组件

    摘要:对于来说,在主机操作系统上运行是绝对必要的。在和中,从主机操作系统中运行可以出现系统通知。你仍然可以在或的虚拟机中成功地运行,但在发出通知时将收到警告错误仅从你的主机操作系统运行。 原文地址: Laravel 5.1 Beauty - Required Software and Components 怎样安装开发 Laravel 5.1 必要的软件: VirtualBox 和 Vagr...

    alaege 评论0 收藏0

发表评论

0条评论

yearsj

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<