最新公告
  • 欢迎您光临AA分享网,一个高级程序员的学习、分享的分享平台!立即加入我们
  • PHP消息队列Beanstalkd类的详解

    这篇文章主要为大家分享了php-beanstalkd消息队列类实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。


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


    beanstalk核心概念:
    job:一个需要异步处理的任务,需要放在一个tube中。
    tube:一个有名的任务队列,用来存储统一类型的job
    producer:job的生产者
    consumer:job的消费者
    简单来说流程就一句话:
    由 producer 产生一个任务 job ,并将 job 推进到一个 tube 中,
    然后由 consumer 从 tube 中取出 job 执行(当然了,这一切的操作的前提是beanstalk服务正在运行中)。

    一个job有READY(时刻准备着被消费者取出), RESERVED(任务正在被一个消费者处理中), DELAYED(延迟任务,设定的延迟时间后进入ready状态), BURIED(休眠中,需要转移状态后才能操作)四种状态。当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状态。


    例子分析:微博是一个很典型的例子:
    1,发一个微博
    2,推送给他的粉丝 (如果有100w个粉丝,这个地方会堵塞很久,用户感受到的就是延迟)
    在微博上发布一条内容要做上面两件事情才算完整,发一条微博只需要进行一次简单的数据库操作,
    但是推送给他的粉丝却要操作100w次数据库,导致用户发一个微博要等待很长的延迟才能返回结果发送成功。
    采用队列的方式,用户发送一条微博立马返回结果,发送成功,剩下的推送就放到队列里面异步执行,
    推送并不需要特别及时,延迟过几秒几十秒都是可以接受的。


    本文实例为大家分享了php beanstalkd消息队列类的具体代码,供大家参考,具体内容如下

    1

    AA分享网一个高级程序员的学习、分享的IT资源分享平台
    AA分享网-企业网站源码-PHP源码-网站模板-视频教程-IT技术教程 » PHP消息队列Beanstalkd类的详解
    • 262会员总数(位)
    • 5946资源总数(个)
    • 4本周发布(个)
    • 0 今日发布(个)
    • 573稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
  • © 2021 本站资源均来自互联网或会员发布,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢! 苏ICP备12052653号

  • XML地图 | 站长导航