rabbitmq 和celery (分散式訊息佇列)
阿新 • • 發佈:2019-01-02
一、 安裝RabbitMQ:
1、RabbitMQ (MAC )(訊息佇列工具,在celery中扮演broker的角色,broker是訊息代理,或者叫做訊息中介軟體)
(1)使用brew來安裝
brew install rabbitmq
或者官網下載: http://www.rabbitmq.com/install-standalone-mac.html
(2)啟動
進入安裝目錄 $ sbin/rabbitmq-server
(3)rabbitmq的python客戶端,最常用的客戶端是 pika
$ pip install pika
(4)通過WEB 和 REST API 管理 RabbitMQ
安裝外掛: $ sudo ./rabbitmq-plugins enable rabbitmq_management
web 預設埠是15672 , 預設賬號和初始密碼都是guest
(5)故障轉移:一般使用 HAProxy做RabbitMQ叢集的負載均衡工具,當叢集節點出現故障時,由應用程式決定故障轉移方式,最簡單的方式就是讓消費者重試。
while 1:
try:
connection = pika.BlockingConnection(parameters)
except:
pass
二、使用Celery (非同步任務的排程工具)
簡單來說,rabbitmq是一個採用Erlang寫的強大的訊息佇列工具。在celery中可以扮演broker的角色。那麼什麼是broker?
celery beat: 任務排程器,beat程序會讀取配置檔案的內容,週期性的將配置中到期需要執行的任務傳送給任務佇列。 celery worker: 執行任務的消費者,通常會在多臺伺服器執行多個消費者 來提高執行效率。 broker: 訊息代理,或者叫做訊息中介軟體,接受任務生產者傳送過來的任務訊息,存進佇列再按序分發給任務消費方(通常是訊息佇列或者資料庫) producer: 呼叫了celery提供的API、函式或者裝飾器而產生任務並交給任務佇列處理的都是任務生產者。 result backend: 任務處理完後儲存狀態資訊和結果,以供查詢。celery預設已支援redis、 rabbitmq、 mongoDB、django ORM等方式
(2)celery使用場景:
- web應用。當用戶觸發的一個操作需要較長時間才能執行完成時,可以把它作為任務交給celery去非同步執行,執行完成後再返回給使用者。
- 定時任務。生產環境經常會有一些定時任務。
- 其他可以非同步執行的任務。比如傳送訊息/ 郵件、推送訊息、清理/設定快取等。
(3)安裝celery,提供了bundles方式,也就是安裝celery 的同事可以一起安裝多種依賴。
pip install "celery[librabbitmq,redis,msgpack]"
(4)使用celery