认识beanstalkd

认识beanstalkd

背景

公司业务作某个需求是将数据写入到消息队列中,而后另一个服务来消费数据,这里的消息队列使用的是beastalkd,以前接触到的消息队列为kafka,所以简单学习记录一下,
本文重点是beanstalkd数据的查看操做和简单的理解

html

介绍

官网

https://beanstalkd.github.io/
git

描述

Beanstalk is a simple, fast work queue.
Its interface is generic, but was originally designed for reducing the latency of page views in high-volume web applications by running time-consuming tasks asynchronously.github

Beanstalkd是一个简单、高效的工做队列系统,其最初设计目的是经过后台异步执行耗时任务方式下降高容量Web应用的页面延时。而其简单、轻量、易用等特色,和对任务优先级、延时 超时重发等控制,以及众多语言版本的客户端的良好支持,使其能够很好的在各类须要队列系统的场景中应用。web

Beanstalkd 是一个轻量级的内存型队列,利用了和 Memcache 相似的协议。依赖 libevent 单线程事件分发机制, 能够部署多个实例,可是高并发支持仍是不太友好;redis

共性

消息队列的好处:主要用来削峰, 解耦, 时序保证,市面上的消息队列也是一抓一大把, 如 kafka, beanstalkd, zeromq, rabbitmq, redis queuechrome

使用

安装

安装就不作描述
服务器

理解

生产者 -> 管道(tube) -> 任务(job) -> 消费者
数据就写在job中,以下job-id=31694512的数据
image.png
Beanstalkd能够建立多个管道,管道里面存了不少任务,消费者从管道中取出任务进行处理。
并发

管道

即有名称的任务队列,一个服务器有一个或者多个管道,用来储存统一类型的 job。每一个管道由一个就绪队列与延迟队列组成。每一个job全部的状态迁移在一个管道中完成。消费者能够监控感兴趣的管道,经过发送 watch 指令。消费者也能够取消监控 tube,经过发送 ignore 命令。经过 list 命令返回全部监控的管道,当客户端预订一个job,此 job 可能来自任何一个它监控的管道。
当一个客户端链接上服务器时,客户端监控的tube 默认为 default,若是客户端提交 job 时,没有使用 use 命令,那么这些 job 就存于名为 default 的 tube 中。
管道按需求建立,不管他们在地方被引用到。若是一个管道变为空和没有任何客户端引用,它将会被自动删除。app

job

任务在队里之中被称做 Job. 一个 Job 在 Beanstalkd 中有如下的生命周期:异步

  • put 将一个任务放置进 tube 中
  • deayed 这个任务如今再等待中,须要若干秒才能准备完毕【延迟队列】
  • ready 这个任务已经准备好了,能够消费了。全部的消费都是要从取 ready 状态的 job
  • reserved 这个任务已经被消费者消费
  • release 这个 job 执行失败了,把它放进 ready 状态队列中。让其余队列执行
  • bury 这个 job 执行失败了,但不但愿其余队列执行,先把它埋起来

image.png

操做

那么问题来了,如今业务代码把数据写道beanstalkd中了,怎么去查看写的对不对呢?
找了一圈没有看到很好的图形化工具,其余都是要用语言去编写客户端去连接,如:https://github.com/beanstalkd/beanstalkd/wiki/Client-Libraries 其中chrome-app还失效了;
一顿操做了发现其实能够经过telnet去连接,直接telnet 127.0.0.1 11300便可,就能够创建起连接

  • 查看全部的tube  list-tubes
  • 切换到指定的tube  use
  • 查看tube的信息 stats-tube
  • 查看下一个ready的job peek-ready
  • 断开连接 quit

更多可参考: https://www.04007.cn/article/251.html

参考资料

官网: https://beanstalkd.github.io/
命令行操做: https://www.04007.cn/article/251.html    http://www.hangdaowangluo.com/archives/2650
概念理解: https://www.zhihu.com/question/21062715 http://www.hulkdev.com/posts/think_in_beanstalkd 
消息队列总结: http://www.javashuo.com/article/p-kblyaffy-kr.html  (推荐)

相关文章
相关标签/搜索