公司業務作某個需求是將數據寫入到消息隊列中,而後另一個服務來消費數據,這裏的消息隊列使用的是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.githubBeanstalkd是一個簡單、高效的工做隊列系統,其最初設計目的是經過後臺異步執行耗時任務方式下降高容量Web應用的頁面延時。而其簡單、輕量、易用等特色,和對任務優先級、延時 超時重發等控制,以及衆多語言版本的客戶端的良好支持,使其能夠很好的在各類須要隊列系統的場景中應用。web
Beanstalkd 是一個輕量級的內存型隊列,利用了和 Memcache 相似的協議。依賴 libevent 單線程事件分發機制, 能夠部署多個實例,可是高併發支持仍是不太友好;redis
消息隊列的好處:主要用來削峯, 解耦, 時序保證,市面上的消息隊列也是一抓一大把, 如 kafka, beanstalkd, zeromq, rabbitmq, redis queuechrome
生產者 -> 管道(tube) -> 任務(job) -> 消費者
數據就寫在job中,以下job-id=31694512的數據
Beanstalkd能夠建立多個管道,管道里面存了不少任務,消費者從管道中取出任務進行處理。
併發
即有名稱的任務隊列,一個服務器有一個或者多個管道,用來儲存統一類型的 job。每一個管道由一個就緒隊列與延遲隊列組成。每一個job全部的狀態遷移在一個管道中完成。消費者能夠監控感興趣的管道,經過發送 watch 指令。消費者也能夠取消監控 tube,經過發送 ignore 命令。經過 list 命令返回全部監控的管道,當客戶端預訂一個job,此 job 可能來自任何一個它監控的管道。
當一個客戶端鏈接上服務器時,客戶端監控的tube 默認爲 default,若是客戶端提交 job 時,沒有使用 use 命令,那麼這些 job 就存於名爲 default 的 tube 中。
管道按需求建立,不管他們在地方被引用到。若是一個管道變爲空和沒有任何客戶端引用,它將會被自動刪除。app
任務在隊裏之中被稱做 Job. 一個 Job 在 Beanstalkd 中有如下的生命週期:異步
那麼問題來了,如今業務代碼把數據寫道beanstalkd中了,怎麼去查看寫的對不對呢?
找了一圈沒有看到很好的圖形化工具,其餘都是要用語言去編寫客戶端去連接,如:https://github.com/beanstalkd/beanstalkd/wiki/Client-Libraries 其中chrome-app還失效了;
一頓操做了發現其實能夠經過telnet去連接,直接telnet 127.0.0.1 11300便可,就能夠創建起連接
更多可參考: 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 (推薦)