一、Beanstalkd的特点

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

Beanstalkd 支持任务(job)优先级 (priority), 延时 (delay), 超时重发 (time-to-run) 和预留 (buried), 能够很好的支持分布式的后台任务和定时任务处理。

Beanstalkd的内部实现采用 libevent, 服务器-客户端之间用类似 memcached 的轻量级通讯协议,具有有很高的性能。

尽管是内存队列, beanstalkd 提供了 binlog 机制, 当重启 beanstalkd 时,当前任务状态能够从纪录的本地 binlog 中恢复。

二、Beanstalkd设计里面的核心概念

2.1 管道 (tube)

管道类似于消息主题 (topic), 在一个 Beanstalkd 中可以支持多个管道, 每个管道都有自己的发布者 (producer) 和消费者 (consumer). 管道之间互相不影响。

2.2 任务 (job)

一个需要异步处理的任务,是Beanstalkd中的基本单元,需要放在一个tube中。beanstalkd用job代替了message的概念,与消息不同,job有一系列状态。

2.3 生成者(producer)

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

2.4 消费者(consumer)

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

2.5 优先级(priority)

任务 (job) 可以有 0~2^32 个优先级, 0 代表最高优先级。 beanstalkd 采用最大最小堆 (Min-max heap) 处理任务优先级排序, 任何时刻调用 reserve 命令的消费者总是能拿到当前优先级最高的任务, 时间复杂度为 O(logn)。

2.6 延时(delay)

有两种方式可以延时执行任务 (job): 生产者发布任务时指定延时;或者当任务处理完毕后, 消费者再次将任务放入队列延时执行 (RELEASE with )。这种机制可以实现分布式的 java.util.Timer,这种分布式定时任务的优势是:如果某个消费者节点故障,任务超时重发 (time-to-run) 能够保证任务转移到另外的节点执行。

2.7 超时重发(time-to-run)

Beanstalkd 把job返回给consumer以后:consumer必须在预设的 TTR (time-to-run) 时间内发送 delete / release/ bury 改变任务状态;否则 Beanstalkd 会认为消息处理失败,然后把job交给另外的消费者节点执行。如果consumer预计在 TTR (time-to-run) 时间内无法完成任务, 也可以发送 touch 命令, 它的作用是让 Beanstalkd 从系统时间重新计算 TTR。

2.8 任务预留(buried)

如果job因为某些原因无法执行, consumer可以把任务置为 buried 状态让 Beanstalkd 保留这些任务。管理员可以通过 peek buried 命令查询被保留的任务,并且进行人工干预。简单的, kick 能够一次性把 n 条被保留的任务踢回队列。

三、job的状态

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

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

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

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

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

如下,是一个典型任务的生命周期:

producer执行put命令将job放入队列,consumer执行reserve命令从队列取出job,执行完毕后发送delete命令告诉beanstalkd删除该job。

如果没有执行delete命令,beanstalkd将在一个TTR周期(默认120s)后重新将该job加入队列;

put              reserve              delete

-----> [READY] ---------> [RESERVED] --------> *poof*

四、Beanstalkd 的命令

Beanstalkd 采用类 memcached 协议, 客户端通过文本命令与服务器交互。这些命令可以简单的分成三组:

4.1 生产类

use

put [bytes]:

生产者用 use 选择一个管道 (tube), 然后用 put 命令向管道发布任务 (job).

4.2 消费类

watch

reserve

delete

release

bury

touch

消费者用 watch 选择多个管道 (tube), 然后用 reserve 命令获取待执行的任务,这个命令是阻塞的。客户端直到有任务可执行才返回。当任务处理完毕后, 消费者可以彻底删除任务 (DELETE), 释放任务让别人处理 (RELEASE), 或者保留 (BURY) 任务。

4.3 维护类

peek job

peek delayed

peek ready

peek buried

kick

用于维护管道内的任务状态, 在不改变任务状态的条件下获取任务。可以用消费类命令改变这些任务的状态。

被保留 (buried) 的任务可以用 kick 命令 “踢” 回队列。

五、Beanstalkd的安装

5.1 下载

5.2 安装

make // 1.8的版本后不需要./configure

make install

默认安装路径 :/usr/local/bin/

5.3 组、用户

groupadd beanstalkd

adduser -M -g beanstalkd -s /sbin/nologin beanstalkd

5.4 启动项

-b DIR

数据持久化的目录(binLog目录),确保-u USER有读写权限。

-f MS

数据持久化缓冲时间(单位:MS)-f0:表示及时持久。

-l ADDR

监听ip;默认0.0.0.0

-p PORT

监听端口;默认11300

-u USER

进程用户

-F

从不持久化数据

-z BYTES

job的大小限制,默认:65535

-s BYTES

持久化文件的大小,默认:10485760(10M),设置成512字节的倍数

-c

压缩binlog日志

-n

不压缩binlog日志

beanstalkd java使用_BeansTalkd的使用与安装相关推荐

  1. beanstalkd java使用_Beanstalkd 队列的使用

    安装 yum install beanstalkd --enablerepo=epel 或者 composer require pda/pheanstalk 1 启动(0.0.0.0可以运行任何ip进 ...

  2. beanstalkd java使用_如何安装和使用Beanstalkd工作队列

    展开全部 使用aptitude安装: 下载并安装Beanstalkd运行以下命令: aptitude install -y beanstalkd 编辑默认配置文件让随e5a48de588b662616 ...

  3. aix java home_在AIX环境下安装IBM JDK 1.6的教程

    因为需要在AIX 6.1 安装并部署应用在Webloigc 10.3,而改Weblogic版本需要JDK 1.6的运行环境,所以需要自行安装JDK 1.6 一.检查系统 1 # oslevel 2 6 ...

  4. Linux Java Web 服务器搭建之tomcat安装

    Linux Java Web 服务器搭建之tomcat安装 一 Tomcat 简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是 ...

  5. 怎么在linux上装java,如何在Ubuntu Linux上安装Java

    介绍 如何在Ubuntu Linux上安装Java?尽管对于一个经验丰富的Linux系统管理员来说,这个主题是一个很容易理解的话题,但是对于初学者而言,在我需要什么版本的Java,如何安装它或如何在多 ...

  6. Java技术分享:升级所安装Java版本的两种方式

    在进行Java开发的时候我们可能会需要升级所安装的Java版本,那么你知道应该如何安装吗?小千今天就来给大家介绍两种方式. 一.卸载掉原本安装的Java,下载最新安装包安装即可. 这个步骤就不介绍了, ...

  7. Java web系统打包成exe安装文件

    Java web系统打包成exe安装文件 一.    工具准备 1.        NSIS打包工具: http://nsis.sourceforge.net下载并安装: 2.        NSIS ...

  8. java 1.8(jdk1.8安装教程)

    java 1.8(jdk1.8安装教程) 一.jdk下载 注意:因为jmeter运行依赖jdk环境,所以在安装jmeter之前需要安装jdk且配置环境变量,需要jdk1.8以上版本 1.jdk下载地址 ...

  9. 【一起学Java第二期】JDK的安装使用用记事本写第一个程序

    文章目录 前言 一.Java开发环境的准备 1.如何使用Java 二.如何获取JDK 1.去Oracle官网下载JDK 2.如何验证安装成功 3.用记事本写第一个程序 三.JVM.JRE.JDK.跨平 ...

最新文章

  1. 领导者有3个要求,你做到了吗?
  2. client-go入门之2:Job相关操作
  3. C代码+汇编 C的 函数汇编学习分析 rep stos dword ptr [edi]
  4. 第四届 AI City 挑战赛 @ CVPR 2020 开始啦!
  5. oracle 判断非空字段
  6. appscan 9.0.3.10 版本下载
  7. 01 GOF设计模式的定义和分类
  8. vue 路由守卫的使用
  9. 概率统计Python计算:双正态总体均值差的单侧区间估计
  10. uniapp 在线升级(热更新)及java后台
  11. 进程间通信(无名管道)
  12. 解决win10只有IE可以上网,其他浏览器都无法连接网络
  13. EXCEL操作之:为纯数字编码添加前缀/后缀后以文本的方式保存
  14. 桌面动态壁纸 wallPaper engine
  15. 梦想照进现实|CSDN 实体奖牌 第六期
  16. 学习MyBatis3这一篇就够了
  17. 吐槽我是特种兵之霹雳火
  18. 计算机软件技术专业毕业论文,软件技术专业毕业论文.doc
  19. 想寻找颜值高又能提升幸福感的投影仪?有它就能为你带来
  20. CSS_3th_div+CSS布局

热门文章

  1. ⼀个比⼤⼩的游戏程序,定义玩家和电脑初始的金钱,先下注,通过掷骰⼦⽐⼤⼩
  2. VScode使用教程
  3. 项目开发团队分配管理软件设计思路
  4. [附源码]计算机毕业设计JAVA花卉销售管理系统
  5. python 中运算符的使用
  6. 《测绘综合能力》——房产测绘
  7. 输入一个球的半径,计算其表面积和体积并输出相应的结果
  8. 计算机对下列几个部件访问速度最快,武汉理工大学材料学院复试计算机题目
  9. axios获取状态码
  10. MediaPipe人体姿态、手指关键点检测