当前位置: 首页 > 工具软件 > beanstalkd > 使用案例 >

beanstalkd java使用_BeansTalkd的使用与安装

国兴文
2023-12-01

一、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日志

 类似资料: