
1、RabbitMQ ((消息隊列工具,在celery中扮演broker的角色,broker是消息代理,或者叫做消息中間件)
2、使用Celery (異步任務的調度工具)
簡單來說,rabbitmq是一個采用Erlang寫的強大的消息隊列工具。在celery中可以扮演broker的角色。那么什么是broker?
broker是一個消息傳輸的中間件,可以理解為一個郵箱。每當應用程序調用celery的異步任務的時候,會向broker傳遞消息,而后celery的worker將會取到消息,進行對於的程序執行。好吧,這個郵箱可以看成是一個消息隊列。那么什么又是backend,通常程序發送的消息,發完就完了,可能都不知道對方時候接受了。為此,celery實現了一個backend,用於存儲這些消息以及celery執行的一些消息和結果。對於 brokers,官方推薦是rabbitmq和redis,至於backend,就是數據庫啦。為了簡單起見,我們都用redis。
(1)celery 的架構

celery beat: 任務調度器,beat進程會讀取配置文件的內容,周期性的將配置中到期需要執行的任務發送給任務隊列。
celery worker: 執行任務的消費者,通常會在多台服務器運行多個消費者 來提高執行效率。
broker: 消息代理,或者叫做消息中間件,接受任務生產者發送過來的任務消息,存進隊列再按序分發給任務消費方(通常是消息隊列或者數據庫)
producer: 調用了celery提供的API、函數或者裝飾器而產生任務並交給任務隊列處理的都是任務生產者。
result backend: 任務處理完后保存狀態信息和結果,以供查詢。celery默認已支持redis、 rabbitmq、 mongoDB、django ORM等方式
(2)celery使用場景:
web應用。當用戶觸發的一個操作需要較長時間才能執行完成時,可以把它作為任務交給celery去異步執行,執行完成后再返回給用戶。
定時任務。生產環境經常會有一些定時任務。
其他可以異步執行的任務。比如發送消息/ 郵件、推送消息、清理/設置緩存等。
