zoukankan      html  css  js  c++  java
  • 认识beanstalkd

    认识beanstalkd

    背景

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

    介绍

    官网

    https://beanstalkd.github.io/

    描述

    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.

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

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

    共性

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

    使用

    安装

    安装就不做描述

    理解

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

    管道

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

    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 
    消息队列总结: https://blog.csdn.net/HD243608836/article/details/80217591  (推荐)

  • 相关阅读:
    公共开发中js代码的管理
    利用kibana插件对Elasticsearch进行映射
    利用kibana插件对Elasticsearch进行批量操作
    利用kibana插件对Elasticsearch进行文档和索引的CRUD操作
    elasticsearch搜索框架的安装相关
    python面试必问 知识整理
    Selenium定位不到元素的解决方法—iframe挡住了去路
    python 几个简单算法详解
    爬虫突破封禁常用方法
    转载:使用Tornado+Redis维护ADSL拨号服务器代理池
  • 原文地址:https://www.cnblogs.com/jwentest/p/11814216.html
Copyright © 2011-2022 走看看