beanstalkd java使用_Beanstalkd 队列的使用
安装
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 队列的使用相关推荐
- beanstalkd java使用_BeansTalkd的使用与安装
一.Beanstalkd的特点 Beanstalkd 是一个轻量级.高性能的消息队列中间件,它最大特点是将自己定位为基于管道 (tube) 和任务 (job) 的工作队列 (work-queue). ...
- java中有界队列的饱和策略(reject policy)
文章目录 AbortPolicy DiscardPolicy DiscardOldestPolicy CallerRunsPolicy 使用Semaphore java中有界队列的饱和策略(rejec ...
- php环行队列实现,java数组实现队列及环形队列实现过程解析
这篇文章主要介绍了java数组实现队列及环形队列实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码内容 ArrayQueue---用数 ...
- JAVA高性能内存队列-disruptor
JAVA内置队列 高性能内存队列-disruptor disruptor为啥这么快 无锁设计 内部采用CAS方式获取下一个任务序列号,没有锁竞争,不需要线程上下文切换 伪共享问题解决 当多线程修改互相 ...
- java数组实现队列_使用数组在Java中进行队列实现
java数组实现队列 什么是队列? (What is a Queue?) Queue is a special type of data structure, which is designed to ...
- Java集合--阻塞队列(ArrayBlockingQueue)
Java集合–阻塞队列(ArrayBlockingQueue) 1 ArrayBlockingQueue ArrayBlockingQueue是一个阻塞队列,底层使用数组结构实现,按照先进先出(FIF ...
- Java集合--阻塞队列(LinkedBlockingQueue)
Java集合–阻塞队列(LinkedBlockingQueue) 1. LinkedBlockingQueue LinkedBlockingQueue是一个使用链表实现的阻塞队列,支持多线程并发操作, ...
- java循环遍历队列_java实现循环队列
java实现循环队列 循环队列的优点 普通队列出队操作开销大:在出队操作时,索引为0后面的所有元素,都需要往前移动一位,元素越多,消耗的时间也越多,时间复杂度为O(N). 循环队列的逻辑: 1.当元素 ...
- JAVA中阻塞队列的类别和区别(转载)
这篇文章将介绍什么是阻塞队列,以及Java中阻塞队列的4种处理方式,并介绍Java 7中提供的7种阻塞队列,最后分析阻塞队列的一种实现方式. 阻塞队列(BlockingQueue)是一个支持两个附加操 ...
最新文章
- odbc 函数序列错误_python时间序列:移动窗口函数前篇
- 摄像头(Ov965x)驱动分析
- 哈尔滨工业大学-数据库系统(基本知识与关系模型1)
- 从一个小demo开始,体验“API经济”的大魅力
- SpringMVC的数据响应-回写数据-直接回写字符串(应用)
- verilog 简单module_一个简单的verilog小程序
- GPU是如何工作的?
- ComponentName
- 【转】Qt VS MFC
- python实现简单爬虫百度首页_python实现简单爬虫功能的示例
- Confluence5.8部分空间名称显示为问号的解决方案
- css中margin属性的探究
- spring mvc 返回json的配置
- [Fondar]手机屏幕驱动板HDMI接口USB触摸使用步骤
- 毫秒级超低延时直播产品实测(PRTC直播/webRTC直播)
- BurpSuite+Proxifer 抓取PC客户端HTTP数据包
- 读《好好学习:个人知识管理精进指南》
- python50图_菊安酱和菜菜的Python可视化50图
- win10升级助手_现在知道还不晚,玩转Win10系统小技巧大合集
- IP路由原理——技术详解
热门文章
- 一行代码帮你检测Android模拟器优劣
- os 学习日记之 os x yosemite 安装win7 双系统
- cstdio(cstdio头文件是什么)
- 那个16岁时盗了马化腾QQ的少年,如今怎么样了?
- 【JZOJ5278】神奇的车票
- C语言:将主函数中输入的字符串反序存放。例如:输入字符串“abcdefg“,则应输出“gfedcba“。
- html手机全面屏的适配,css实现适配iphone全面屏代码
- 降噪蓝牙耳机哪个好?2023年四款好用的降噪蓝牙耳机推荐
- Trax洞察:3C市场秩序与合规之战
- Referrer和Referrer Policy介绍