認識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  (推薦)

相關文章
相關標籤/搜索