如何安裝和使用Beanstalkd工作隊列

2020-12-11 51CTO

介紹

小心翼翼地宣布每一元素的職責部署應用程式棧帶來很多好處,包括簡單的診斷問題時發生,規模迅速的能力,以及更清晰的管理範圍涉及的組件。

在當今世界web服務的工程,一個關鍵的組件實現上述場景涉及利用消息隊列和工作(或任務)。這些通常是彈性和靈活的應用程式很容易實現和設置。他們是完美的分裂的不同部分之間的業務邏輯應用程式包時生產。

在這篇文章中,我們的應用程式級別系列通信解決方案,我們將看看Beanstalkd創建這個片段的分離。

什麼是Beanstalkd

Beanstalkd首先是解決了一個流行的web應用程式的需求(Facebook上的原因)。目前,這是一個絕對可靠,易於安裝的消息傳遞服務,是完美的開始和使用。

如前所述,Beanstalkd的主要用例是管理不同部分和工人之間的工作流應用程式的部署通過工作隊列和消息堆棧,類似於其他受歡迎的解決方案,比如RabbitMQ。然而,創建Beanstalkd使它有別於其他工作。

自成立以來,與其他解決方案,Beanstalkd旨在成為一個工作隊列,而不是一把雨傘工具來滿足許多需求。為了實現這一目的,它作為一種輕量級的、快速有效的應用程式基於C程式語言。精益建築還允許它是安裝和使用非常簡單,使它適合大多數用例。

Features(特性)

能夠監控工作返回ID,在創建返回,只有一個的特性使它有別於其他的Beanstalkd。提供一些其他有趣的功能是:

1.持久性—>Beanstalkd運行使用內存,但也提供了持久性支持。

2.優先級—>與大多數選擇一樣,Beanstalkd提供了不同的任務的優先級來處理緊急事情時需要。

3.分布 —->不同的伺服器實例可以分布類似於Memcached是如何工作的。

4.掩蓋 —-> 有可能通過掩蓋它無限期延期的作業(即任務)。

5.第三方工具—>Beanstalkd附帶各種第三方工具包括綜合領先指標和基於web的管理控制臺。

6.過期 —->工作可以設置為過期,auto-queue之後(TTR – Time To Run).

Beanstalkd使用案例

一些模範的Banstalkd用例:

允許web伺服器快速響應請求,而不是被迫當場曾推高程序執行

在指定的時間間隔執行某些工作(即爬行web)

分發到多個工作人員進行處理

讓離線客戶端(例如一個斷開連接的用戶)獲取數據在稍後的時間,而不是讓它永久失去了通過一個工人

引入完全異步功能的後端系統

訂購和優先任務

應用程式負載不同員工之間保持平衡

極大地提高應用程式的可靠性和正常運行時間

處理CPU密集型工作(視頻、圖片等)

發送電子郵件到您的列表和更多。

Beanstalkd元素

就像大多數應用程式,Beanstalkd附帶自己的術語來解釋它的部分。

Tubes / Queues

Beanstalkd管翻譯從其他消息傳遞應用程式隊列。他們是通過工作(或消息)轉移到消費者(即工人)。

Jobs / Messages

由於Beanstalkd是一個工作隊列,通過管稱為轉移工作是什麼——類似於所發送的消息。

Producers / Senders

生產商,類似於高級消息隊列協議的定義,是應用程式創建和發送工作(或消息)。他們正在使用的消費者。

Consumers / Receivers

接收器是不同的應用程式的堆棧從管找份工作,由生產者進行處理。

在Ubuntu 13安裝Beanstalkd

可以很簡單獲得Beanstalkd通過包管理器才能和開始。然而,在幾個命令,您還可以從源下載並安裝它。

注意:我們將執行安裝和執行行動列在這裡的新鮮和新創建的液滴由於各種原因。如果你是積極服務客戶,可能會修改您的系統,不要打破任何工作和不運行在問題,強烈建議您試著在一個新系統下面的說明。

使用aptitude安裝:

下載並安裝Beanstalkd運行以下命令:

  1. aptitude install -y beanstalkd 

編輯默認配置文件讓隨著系統啟動

  1. vim /etc/default/beanstalkd 

打開文件後,向下滾動並找到底部線#開始= yes。將其更改為:

  1. START=yes 

下面介紹源碼安裝

我們需要從原始碼安裝過程的一個關鍵工具- Git。

運行以下獲取Git在你系統上:

  1. aptitude install -y git 

下載必要的開發工具軟體包:

  1. aptitude install -y build-essential 

使用Git克隆(下載)官方庫:

  1. git clone https://github.com/kr/beanstalkd 

進入到下載目錄:

  1. cd beanstalkd 

從原始碼構建應用程式:

  1. make 

安裝:

  1. make install 

再介紹一下centos下源碼安裝:

  1. 下載地址: 
  2.   
  3. wget   http://cloud.github.com/downloads/kr/beanstalkd/beanstalkd-1.4.6.tar.gz 
  4.   
  5. 解壓: 
  6.   
  7. tar xzf beanstalkd-1.4.6.tar.gz 
  8.   
  9. cd beanstalkd-1.4.6 
  10.   
  11. /configure 
  12.  
  13. make 
  14.   
  15. make install 
  16.   
  17. 默認安裝路徑 :/usr/local/bin/ 
  18.   
  19. 查看版本: 
  20.   
  21. /usr/local/bin/beanstalkd -v 
  22.   
  23. 1.4.6 

再附加一個啟動腳本,從Fedora下挖來的 startup 腳本:

  1. #!/bin/sh 
  2. # beanstalkd - a simple, fast workqueue service 
  3. # chkconfig:   - 57 47 
  4. # description: a simple, fast workqueue service 
  5. # processname:  beanstalkd 
  6. # config:       /etc/sysconfig/beanstalkd 
  7. #              
  8.   
  9. ### BEGIN INIT INFO 
  10. # Provides: beanstalkd 
  11. # Required-Start: $local_fs $network $remote_fs 
  12. # Required-Stop: $local_fs $network $remote_fs 
  13. # Default-Stop: 0 1 2 6 
  14. # Short-Description: start and stop beanstalkd 
  15. # Description: a simple, fast work-queue service 
  16. ### END INIT INFO 
  17.   
  18. # Source function library. 
  19. /etc/rc.d/init.d/functions 
  20.   
  21. # Source networking configuration. 
  22. /etc/sysconfig/network 
  23.   
  24. # Check that networking is up. 
  25. [ "$NETWORKING" = "no" ] && exit 
  26. exec="/usr/local/bin/beanstalkd" 
  27. prog=$(basename $exec) 
  28.  
  29. # default options, overruled by items in sysconfig 
  30. BEANSTALKD_ADDR=127.0.0.1 
  31. BEANSTALKD_PORT=11300 
  32. BEANSTALKD_USER=beanstalkd 
  33.   
  34. [ -e /etc/sysconfig/beanstalkd ] && . /etc/sysconfig/beanstalkd 
  35.   
  36. lockfile=/var/lock/subsys/beanstalkd 
  37.  
  38. start() { 
  39. [ -x $exec ] || exit 5 
  40. echo -n $"Starting $prog: " 
  41. # if not running, start it up here, usually something like "daemon $exec" 
  42. options="-l ${BEANSTALKD_ADDR} -p ${BEANSTALKD_PORT} -u ${BEANSTALKD_USER}" 
  43. if [ "${BEANSTALKD_MAX_JOB_SIZE}" != ""  ]; then 
  44. options="${options} -z ${BEANSTALKD_MAX_JOB_SIZE}" 
  45. fi 
  46.  
  47. if [ "${BEANSTALKD_BINLOG_DIR}" != "" ]; then 
  48. if [ ! -d "${BEANSTALKD_BINLOG_DIR}" ]; then 
  49. echo "Creating binlog directory (${BEANSTALKD_BINLOG_DIR})" 
  50. mkdir -p ${BEANSTALKD_BINLOG_DIR} && chown ${BEANSTALKD_USER}:${BEANSTALKD_USER} ${BEANSTALKD_BINLOG_DIR} 
  51. fi 
  52. options="${options} -b ${BEANSTALKD_BINLOG_DIR}" 
  53. if [ "${BEANSTALKD_BINLOG_FSYNC_PERIOD}" != "" ]; then 
  54. options="${options} -f ${BEANSTALKD_BINLOG_FSYNC_PERIOD}" 
  55. else 
  56. options="${options} -F" 
  57. fi 
  58. if [ "${BEANSTALKD_BINLOG_SIZE}" != "" ]; then 
  59. options="${options} -s ${BEANSTALKD_BINLOG_SIZE}" 
  60. fi 
  61. fi 
  62.  
  63. daemon $exec -d $options 
  64. retval=$? 
  65. echo 
  66. [ $retval -eq 0 ] && touch $lockfile 
  67. return $retval 
  68.   
  69. stop() { 
  70. echo -n $"Stopping $prog: " 
  71. # stop it here, often "killproc $prog" 
  72. killproc $prog -INT 
  73. retval=$? 
  74. echo 
  75. [ $retval -eq 0 ] && rm -f $lockfile 
  76. return $retval 
  77.   
  78. restart() { 
  79. stop 
  80. start 
  81.   
  82. reload() { 
  83. restart 
  84.   
  85. force_reload() { 
  86. restart 
  87.   
  88. rh_status() { 
  89. # run checks to determine if the service is running or use generic status 
  90. status $prog 
  91.   
  92. rh_status_q() { 
  93. rh_status >/dev/null 2>&1 
  94.  
  95.  
  96. case "$1" in 
  97. start) 
  98. rh_status_q && exit 0 
  99. $1 
  100. ;; 
  101. stop) 
  102. rh_status_q || exit 0 
  103. $1 
  104. ;; 
  105. restart) 
  106.  $1 
  107. ;; 
  108. reload) 
  109. rh_status_q || exit 7 
  110. $1 
  111. ;; 
  112. force-reload) 
  113. force_reload 
  114. ;; 
  115. status) 
  116. rh_status 
  117. ;; 
  118. condrestart|try-restart) 
  119. rh_status_q || exit 0 
  120. restart 
  121. ;; 
  122. *) 
  123. echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" 
  124. exit 2 
  125. esac 
  126. exit $? 

使用Beanstalkd

在安裝之後,您就可以開始使用Beanstalkd伺服器。以下是運行守護進程的選項:

  1. -b DIR   wal directory 
  2. -f MS    fsync at most once every MS milliseconds (use -f0 for "always fsync") 
  3. -F       never fsync (default) 
  4. -l ADDR  listen on address (default is 0.0.0.0) 
  5. -p PORT  listen on port (default is 11300) 
  6. -u USER  become user and group 
  7. -z BYTES set the maximum job size in bytes (default is 65535) 
  8. -s BYTES set the size of each wal file (default is 10485760) 
  9. (will be rounded up to a multiple of 512 bytes) 
  10. -c       compact the binlog (default) 
  11. -n       do not compact the binlog 
  12. -v       show version information 
  13. -V       increase verbosity 
  14. -h       show this help 

使用例子:

  1. # Usage: beanstalkd -l [ip address] -p [port #] 
  2. # For local only access: 
  3. beanstalkd -l 127.0.0.1 -p 11301 & 

管理服務:

如果安裝包管理器(i.e. aptitude),你將能夠管理Beanstalkd作為服務守護進程。

  1. # To start the service: 
  2. service beanstalkd start 
  3.   
  4. # To stop the service: 
  5. service beanstalkd stop 
  6.   
  7. # To restart the service: 
  8. service beanstalkd restart 
  9.   
  10. # To check the status: 
  11. service beanstalkd status 

獲得Beanstalkd客戶端庫

Beanstalkd配有一長串的支持客戶端庫來處理許多不同的應用程式部署。這個列表的支持語言和框架,包括:

●Python

●Django

●Go

●Java

●Node.js

●Perl

●PHP

●Ruby

●and more.

查看完整列表支持,尋找你最喜歡的語言和安裝說明,查看客戶端庫頁面Beanstalkd Github上。

使用Beanstalkd

在本節之前,完成這篇文章,讓我們快速Beanstalkd的基本用法。在我們的示例中,我們將使用Python語言和Beanstald Python bindings ——beanstalkc。

安裝beanstalkc,運行以下命令:

  1. pip install pyyaml 
  2. pip install beanstalkc 

基本操作

在所有Python文件你想處理Beanstalkd時,需要導入beanstalkc並連接:

  1. import beanstalkc 
  2.   
  3. # Connection 
  4. beanstalk = beanstalkc.Connection(host='localhost'port=11301

To enqueue a job:

  1. beanstalk.put('job_one') 

To receive a job:

  1. job = beanstalk.reserve() 
  2. job.body == 'job_one' 

To delete a job after processing it:

  1. job.delete() 

To use a specific tube (i.e. queue / list):

  1. beanstalk.use('tube_a') 

To list all available tubes:

  1. beanstalk.tubes() 
  2. # ['default', 'tube_a'] 

Final example (nano btc_ex.py):

  1. import beanstalkc 
  2.   
  3. # Connect 
  4. beanstalk = beanstalkc.Connection(host='localhost'port=11301
  5.   
  6. # See all tubes: 
  7. beanstalk.tubes() 
  8.  
  9. # Switch to the default (tube): 
  10. beanstalk.use('default') 
  11.   
  12. # To enqueue a job: 
  13. beanstalk.put('job_one') 
  14.   
  15. # To receive a job: 
  16. job = beanstalk.reserve() 
  17.  
  18. # Work with the job: 
  19. print job.body 
  20.   
  21. # Delete the job:  
  22. job.delete() 

當您運行上面的腳本時,您應該會看到工作的主體被列印:

  1. python btc_ex.py 
  2. # job_one 

看到更多關於beanstalkd(beanstalkc)操作,查看它的入門教程–>http://beanstalkc.readthedocs.org/en/latest/tutorial.html

【責任編輯:

守望幸福

TEL:(010)68476606】

點讚 0

相關焦點

  • 如何使用Spring Boot與RabbitMQ結合實現延遲隊列
    顧名思義,延遲隊列就是進入該隊列的消息會被延遲消費的隊列。而一般的隊列,消息一旦入隊了之後就會被消費者馬上消費。延遲隊列能做什麼?延遲隊列多用於需要延遲工作的場景。最常見的是以下兩種場景:延遲消費。比如:用戶生成訂單之後,需要過一段時間校驗訂單的支付狀態,如果訂單仍未支付則需要及時地關閉訂單。
  • Java實現簡單延遲隊列和分布式延遲隊列
    在我們的工作中,很多地方使用延遲隊列,比如訂單到期沒有付款取消訂單,制訂一個提醒的任務等都需要延遲隊列,那麼我們需要實現延遲隊列。我們本文的梗概如下,同學們可以選擇性閱讀。1. 實現一個簡單的延遲隊列。
  • 高性能Swoole擴展的安裝與使用
    使用純C語言編寫(Swoole 4開始逐漸改為通過C++編寫),提供了PHP語言的異步多線程伺服器、異步TCP/UDP網絡客戶端、異步MySQL、異步Redis、資料庫連接池、AsyncTask、消息隊列、毫秒定時器、異步文件讀寫、異步DNS查詢。
  • linux kernel工作隊列及源碼詳細講解
    )/** initialize all of a work-struct:*/// 初始化工作結構, 和__WORK_INITIALIZER功能相同,不過__WORK_INITIALIZER用在// 參數初始化定義, 而該宏用在程序之中對工作結構賦值#define INIT_WORK(_work, _func, _data)do {INIT_LIST_HEAD
  • Timbergrove如何使用InfluxDB提供智能工作區套件
    Timbergrove如何通過InfluxDB為構建管理員提供物聯網的簡單介紹最近,作為Timbergrove更廣泛的 Moonshot物聯網產品的一部分,他們創建了一個智能工作場所套件,幫助建築經理開始使用物聯網。目標是為最終用戶提供即時價值,並平衡易於入職和可擴展性。
  • PS插件怎麼安裝?PS插件如何使用?Adobe系列插件介紹及安裝使用
    PS插件如何安裝如何使用向來是許多剛入門學習PS的難點,但也正是這些PS插件的安裝和使用使得我們日常用PS效率更高,畢竟工欲善其事,必先利其器。之前也給大家介紹過一些關於PS插件如何安裝,如何使用的教程,今天同樣再給大家推薦幾款強大的PS插件:PS逼真陰影插件,PS專業配色神器Coolorus,PS圖片轉卡通插畫,PS圖片轉手繪漫畫風格動作以及一套PS和AI的漸變預設。
  • 如何安裝和使用Color Highlight插件
    如何安裝和使用Color Highlight插件1.點擊最左側的活動欄裡的【擴展插件】按鈕,切換至安裝擴展插件的視圖,該視圖已經為所有人提供了兩萬多款小巧而好用的擴展插件,這些擴展插件不僅都能省時省力,而且也能提高開發效率,如下圖所示:
  • sonar安裝和使用
    jdk的版本需要和Sonar版本一致(32bit或者都是64bit)[原]代碼審查工具Sonar(一)-- 簡介與安裝代碼審查是持續集成理論裡重要的一部分。審查軟體和測試軟體之間存在著微妙的差別。測試是動態的,它執行軟體,目的是測試軟體的功能。
  • 消息隊列:Rabbitmq如何保證不丟消息
    ,broker就會發送一個確認給生產者(包含消息的唯一ID),這就使得生產者知道消息已經正確到達目的隊列了,如果消息和隊列是可持久化的,那麼確認消息會將消息寫入磁碟之後發出,broker回傳給生產者的確認消息中deliver-tag域包含了確認消息的序列號。
  • 如何安裝和使用Vue?
    5.1Vue的核心概念之一:通過數據驅動界面更新, 無需操作DOM來更新界面使用Vue我們只需要關心如何獲取數據, 如何處理數據, 如何編寫業務邏輯代碼,我們只需要將處理好的數據交給Vue, Vue就會自動將數據渲染到模板中(界面上)
  • unity3d安裝和使用介紹 - CSDN
    因為 Visual Studio 有強大的包管理器插件,所以即便是不熟悉 NuGet 命令的小夥伴也能輕鬆安裝和管理 NuGet 包。不過,對 Unity C# 項目來說,你並不能直接引用 dll,也不能直接使用自帶的 NuGet 包管理器完成 NuGet 包安裝。本文介紹原因和真正的引用方法。
  • RabbitMQ的5種核心消息模式都不懂,也敢說會用消息隊列
    安裝及配置接下來我們介紹下RabbitMQ的安裝和配置,提供Windows和Linux兩種安裝方式。學過RabbitMQ的朋友應該了解過這些消息模式的Java實現,這裡我們使用Spring AMQP的形式來實現它們。簡單模式簡單模式是最簡單的消息模式,它包含一個生產者、一個消費者和一個隊列。生產者向隊列裡發送消息,消費者從隊列中獲取消息並消費。
  • 拉力傳感器如何接線?如何安裝使用?
    拉力傳感器安裝使用1、在水平調整方面。如果使用的是單只拉力傳感器的話,其底座的安裝平面要使用水平儀調整直到水平;如果是多個傳感器同時測量的情況,那麼它們底座的安裝面要儘量保持在一個水平面上,這樣做的目的主要是為了保證每個傳感器所承受的力量基本一致。
  • 輕量級消息隊列RedisQueue
    隨著強大的.NET5發布,.NET技術棧裡面怎可沒有最佳的消息隊列搭檔? 本文從高性能Redis組件NewLife.Redis出發,借用快遞業務場景,講解.NET中如何使用Redis作為消息隊列,搭建企業級分布式系統架構!
  • Java中常用隊列的總結
    隊列是一種先進先出(FIFO)的抽象數據結構,在Java中,隊列使用了兩種數據類型來實現的,分別是:數組和鍊表這兩種數據結構。本文主要內容:回顧Java中常用的七個阻塞隊列進行總結及阻塞隊列中四組AP並進行總結。本文來源:本文是由凱哥Java(kaigejava)原創發布。
  • Pycharm上Git安裝和使用(程式設計師必備)
    個人認為,作為一名程式設計師,學會使用和利用好GitHub這個非常方便的工具非常必要,Git可以非常方便的上傳和下載你的代碼,特別作為初學者,你可以把平常練習的代碼和筆記統統放在GitHub上面,對你們找以後工作和程序調用非常有幫助。這是你的能力的證明和學習歷程的記錄。作為自學者,所以覺得在這裡給大家講解如何安裝和使用Git這個工具非常重要。
  • 海爾洗衣機使用說明和安裝方法
    4.進行選擇 選擇洗滌次數,脫水次數,衝洗時間等,全部選完之後按下啟動鍵,海爾洗衣機就開始工作了。 有的海爾洗衣機可以設置預約功能,先做好準備工作,然後進行設置,海爾洗衣機會到你設置的時間才開始工作。 洗衣完成之後,海爾洗衣機會發出「滴滴」的提示音,提示工作完成,這時候將洗好甩幹的衣服取出來晾上就可以了。
  • 淺入淺出消息隊列
    相信在學生時代大家都遇到過上面的這種情況,如果我們將在學校上課抽象成一個系統,那這種情況就是一個很常見的消息隊列的使用場景。在上述實例中,要提的問題就是**「消息」,提問題的學生是「生產者」,回答問題的老師是「消費者」,收集問題的課代表是「消息隊列」**。
  • 軍訓不只是隊列訓練更要學習槍枝的使用和打靶訓練
    隨著9月份學生的陸續開學,大學新生和高中新生都要進行軍訓,軍訓的目的是通過嚴格的軍事訓練提高學生的政治覺悟,激發愛國熱情,發揚革命英雄主義精神,培養艱苦奮鬥,刻苦耐勞的堅強毅力和集體主義精神,增強國防觀念和組織紀律性,養成良好的學風和生活作風,掌握基本軍事知識和技能。軍訓的重要性不言而喻,我們在對新生進行軍訓的時候除了進行隊列訓練外更要讓學生們學習槍枝的知識和使用,真正使軍訓落到實處。
  • 五分鐘學後端技術:如何學習後端工程師必學的消息隊列
    消息隊列管理器在將消息從它的源中繼到它的目標時充當中間人。隊列的主要目的是提供路由並保證消息的傳遞;如果發送消息時接收者不可用,消息隊列會保留消息,直到可以成功地傳遞它。為什麼要使用消息隊列我覺得使用消息隊列主要有兩點好處:1.通過異步處理提高系統性能(削峰、減少響應所需時間);2.降低系統耦合性。