1.工作流程

celery通过消息进行通信,通常使用一个叫Broker(中间人)来协client(任务的发出者)和worker(任务的处理者). clients发出消息到队列中,broker将队列中的信息派发给worker来处理。

  一个celery系统可以包含很多的worker和broker,可增强横向扩展性和高可用性能。

2.概念介绍

Brokers

Celery支持多种消息中间件作为Broker,即中间人。来在应用程序和Worker之间传递消息。

broker是一个消息传输的中间件,可以理解为一个邮箱。每当应用程序调用celery的异步任务的时候,会向broker传递消息,而后celery的worker将会取到消息,进行对于的程序执行。好吧,这个邮箱可以看成是一个消息队列。其中Broker的中文意思是 经纪人 ,其实就是一开始说的 消息队列 ,用来发送和接受消息。这个Broker有几个方案可供选择:RabbitMQ (消息队列),Redis(缓存数据库),数据库(不推荐),等等

消息中间件 支持适配状态 支持监控 支持远程控制
RabbitMQ 稳定
Redis 稳定
Amazon SQS 稳定
Zookeeper 实验

backend

通常程序发送的消息,发完就完了,可能都不知道对方时候接受了。为此,celery实现了一个backend,用于存储这些消息以及celery执行的一些消息和结果。Backend是在Celery的配置中的一个配置项 CELERY_RESULT_BACKEND ,作用是保存结果和状态,如果你需要跟踪任务的状态,那么需要设置这一项,可以是Database backend,也可以是Cache backend

Worker

Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

3 分布式任务队列 异步处理框架

它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。我们需要一个消息队列来下发我们的任务。首先要有一个消息中间件,此处选择rabbitmq (也可选择 redis 或 Amazon Simple Queue Service(SQS)消息队列服务)。推荐 选择 rabbitmq 。使用RabbitMQ是官方特别推荐的方式,因此我也使用它作为我们的broker。 

可以看到,Celery 主要包含以下几个模块:

  • 任务模块 Task

    包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列。

  • 消息中间件 Broker

    Broker,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。

  • 任务执行单元 Worker

    Worker 是执行任务的处理单元,它实时监控消息队列,获取队列中调度的任务,并执行它。

  • 任务结果存储 Backend

    Backend 用于存储任务的执行结果,以供查询。同消息中间件一样,存储也可使用 RabbitMQ, redis 和 MongoDB 等。

最新文章

  1. N皇后问题—初级回溯
  2. oracle当前的连接数
  3. 如何让VS2013编写的程序
  4. MVC控制器取参数值
  5. lua的栈
  6. Robotium 测试方法
  7. CocoaPods一个Objective-C第三方库的管理利器
  8. 使用Mybatis Generator 生产 AS400中的数据表对象
  9. Swift 学习笔记1
  10. VS2005 检测内存泄漏的方法(转载)
  11. JavaScript学习总结【10】、DOM 事件
  12. 知识库总结mysql常用cmd命令
  13. application/json IE 兼容问题
  14. Ajax动态刷新验证码图片
  15. PHP运行出现Notice : Use of undefined constant
  16. HPU--1141 蜗牛爬树
  17. markdown 字体颜色
  18. 百度APP移动端网络深度优化实践分享(二):网络连接优化篇
  19. 2019.03.09 codeforces620E. New Year Tree(线段树+状态压缩)
  20. Hibernatede 一对多映射配置

热门文章

  1. 凭这份pdf让我轻松拿下了蚂蚁金服、字节跳动、小米等大厂的offer
  2. Java——八种基本数据类型(常用类)
  3. cb41a_c++_STL_算法_填充新值fill_generate
  4. 为什么启动线程是start方法?
  5. 天津开发票/v电13543443967
  6. 黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据
  7. Maven搭建Spring MVC
  8. 前端基础:HTTP 协议详解
  9. Java synthetic
  10. I/O模式及select、 poll、 epoll