安装

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

1

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

配置文件

/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 的状态。

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 不再维持这些消息。

一些特性

优先级

任务 (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

Producer 示例:向队列中添加job

$pheanstalk = new Pheanstalk_Pheanstalk('127.0.0.1');

$pheanstalk ->useTube('tubeName') ->put($jobData);

Consumer 示例:从队列中取出job

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

echo $job->getData();

$pheanstalk->delete($job);

检查服务状态

$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 java使用_Beanstalkd 队列的使用相关推荐

  1. beanstalkd java使用_BeansTalkd的使用与安装

    一.Beanstalkd的特点 Beanstalkd 是一个轻量级.高性能的消息队列中间件,它最大特点是将自己定位为基于管道  (tube) 和任务 (job) 的工作队列 (work-queue). ...

  2. java中有界队列的饱和策略(reject policy)

    文章目录 AbortPolicy DiscardPolicy DiscardOldestPolicy CallerRunsPolicy 使用Semaphore java中有界队列的饱和策略(rejec ...

  3. php环行队列实现,java数组实现队列及环形队列实现过程解析

    这篇文章主要介绍了java数组实现队列及环形队列实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码内容 ArrayQueue---用数 ...

  4. JAVA高性能内存队列-disruptor

    JAVA内置队列 高性能内存队列-disruptor disruptor为啥这么快 无锁设计 内部采用CAS方式获取下一个任务序列号,没有锁竞争,不需要线程上下文切换 伪共享问题解决 当多线程修改互相 ...

  5. java数组实现队列_使用数组在Java中进行队列实现

    java数组实现队列 什么是队列? (What is a Queue?) Queue is a special type of data structure, which is designed to ...

  6. Java集合--阻塞队列(ArrayBlockingQueue)

    Java集合–阻塞队列(ArrayBlockingQueue) 1 ArrayBlockingQueue ArrayBlockingQueue是一个阻塞队列,底层使用数组结构实现,按照先进先出(FIF ...

  7. Java集合--阻塞队列(LinkedBlockingQueue)

    Java集合–阻塞队列(LinkedBlockingQueue) 1. LinkedBlockingQueue LinkedBlockingQueue是一个使用链表实现的阻塞队列,支持多线程并发操作, ...

  8. java循环遍历队列_java实现循环队列

    java实现循环队列 循环队列的优点 普通队列出队操作开销大:在出队操作时,索引为0后面的所有元素,都需要往前移动一位,元素越多,消耗的时间也越多,时间复杂度为O(N). 循环队列的逻辑: 1.当元素 ...

  9. JAVA中阻塞队列的类别和区别(转载)

    这篇文章将介绍什么是阻塞队列,以及Java中阻塞队列的4种处理方式,并介绍Java 7中提供的7种阻塞队列,最后分析阻塞队列的一种实现方式. 阻塞队列(BlockingQueue)是一个支持两个附加操 ...

最新文章

  1. odbc 函数序列错误_python时间序列:移动窗口函数前篇
  2. 摄像头(Ov965x)驱动分析
  3. 哈尔滨工业大学-数据库系统(基本知识与关系模型1)
  4. 从一个小demo开始,体验“API经济”的大魅力
  5. SpringMVC的数据响应-回写数据-直接回写字符串(应用)
  6. verilog 简单module_一个简单的verilog小程序
  7. GPU是如何工作的?
  8. ComponentName
  9. 【转】Qt VS MFC
  10. python实现简单爬虫百度首页_python实现简单爬虫功能的示例
  11. Confluence5.8部分空间名称显示为问号的解决方案
  12. css中margin属性的探究
  13. spring mvc 返回json的配置
  14. [Fondar]手机屏幕驱动板HDMI接口USB触摸使用步骤
  15. 毫秒级超低延时直播产品实测(PRTC直播/webRTC直播)
  16. BurpSuite+Proxifer 抓取PC客户端HTTP数据包
  17. 读《好好学习:个人知识管理精进指南》
  18. python50图_菊安酱和菜菜的Python可视化50图
  19. win10升级助手_现在知道还不晚,玩转Win10系统小技巧大合集
  20. IP路由原理——技术详解

热门文章

  1. 一行代码帮你检测Android模拟器优劣
  2. os 学习日记之 os x yosemite 安装win7 双系统
  3. cstdio(cstdio头文件是什么)
  4. 那个16岁时盗了马化腾QQ的少年,如今怎么样了?
  5. 【JZOJ5278】神奇的车票
  6. C语言:将主函数中输入的字符串反序存放。例如:输入字符串“abcdefg“,则应输出“gfedcba“。
  7. html手机全面屏的适配,css实现适配iphone全面屏代码
  8. 降噪蓝牙耳机哪个好?2023年四款好用的降噪蓝牙耳机推荐
  9. Trax洞察:3C市场秩序与合规之战
  10. Referrer和Referrer Policy介绍