celery中间件:broker

Celery 支持多种消息传输的方式。

中间人(Broker)使用指南

  • 使用 RabbitMQ

  • 使用 Redis

  • 使用 Amazon SQS

中间人(Broker)概况

这是不同的中间件比对情况,更多的信息可以在每个中间件的文档中找到。

名称

状态

监控

远程控制

RabbitMQ

稳定

Redis

稳定

Amazon SQS

稳定

Zookeeper

实验阶段

目前实验阶段的中间人(Broker)只是功能性的,但是没有专门的维护人员。

缺少监控就意味着这个监控已经失效,因此相关的 Flower、Celery events、celerymon 和其他基于此功能的监控工具全部失效。

远程管理控制是指可以通过 celery inspect 和 celery control(以及使用远程控制API的工具)在程序运行时检查和管理职程(Worker)的能力。

使用RabbitMQ

安装与配置

RabbitMQ 是默认的中间人(Broker),只需要配置连接的URL即可,不需要安装额外的的配置以及初始化配置信息

broker_url = 'amqp://myuser:mypassword@localhost:5672/myvhost'

有关 Celery 各种中间人(Broker)的配置列表,请查阅代理设置,并且按照说明设置用户名和密码。

安装 RabbitMQ服务

安装 RabbitMQ 服务可以通过 RabbitMQ官网 进行 安装RabbitMQ ,Mac OS安装请查阅 Mac OS安装RabbitMQ。

配置 RabbitMQ

要使用 Celery,需要创一个RabbitMQ账户:

sudo rabbitmqctl add_user myuser mypasswordsudo rabbitmqctl add_vhost myvhostsudo rabbitmqctl set_user_tags myuser mytagsudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"

修改myuser、mypassword、myvhost为自己配置的配置信息。

关于更多RabbitMQ配置,请查阅 RabbitMQ手册。

Rabbit MQ安装过程:

略......

使用Redis

安装

如果使用 Redis 作为中间人(Broker)必须要安装 Celery 的依赖库,您可以通过 celery[redis] 进行安装:

pip install -U "celery[redis]"

配置

Redis 的配置非常的简单,只需要配置 Redis 的 URL :

app.conf.broker_url = 'redis://localhost:6379/0'

URL 的格式为:

redis://:password@hostname:port/db_number

URL 的所有配置都可以自定义配置的,默认使用的是 localhost 的 6379 端口中 0 数据库。( Redis 默认有 16 个数据库)

可以通过 Uninx 套接字进行连接,URl 格式如下:

redis+socket:///path/to/redis.sock

可以通过设置 virtual_host参数添加到URL上进行指定使用时 Uninx 套接字连接的数据库编号:

redis+socket:///path/to/redis.sock?virtual_host=db_number

Celery 也可以连接 Redis 哨兵也是非常简单的:

app.conf.broker_url = 'sentinel://localhost:26379;sentinel://localhost:26380;sentinel://localhost:26381'app.conf.broker_transport_options = {'master_name':'cluster1'}

可见性超时

可见性超时为将消息重新下发给另外一个程序之前等待确认的任务秒数。请注意查看下面的 注意事项。

可以通过 broker_transport_options 选项进行修改:

app.conf.broker_transport_options = {'visibility_timeout': 3600} # 一个小时

默认的可见性超时时间为1个小时。

结果

如果您想保存任务执行返回结果保存到Redis,您需要进行以下配置:

app.conf.result_backend = 'redis://localhost:7379/0'

有关 Redis 保存结果的完整选项列表,请查阅 Redis后端配置。

如果您使用的是 Redis 哨兵默认是,则需要使用 result_backend_transport_options 进行指定 master_name:

app.conf.result_backend_transport_options = {'master_name': "mymaster"}

注意事项

广播前缀

默认情况下,所有的虚拟机都可以看到广播的消息。

您必须为消息进行设置前缀,以便它们由仅活动的虚拟机接收:

app.conf.broker_transport_options = {'fanout_prefix': true}

注意:该选项仅是向后兼容的,老版本不支持。集群中所有的职程都必须要开启设置,否则无法进行通信。

该设置在将来以后的版本是默认配置,所以请尽早进行迁移。

广播模式

默认情况下, 职程(Worker)收到所有与任务相关的事件。

为了避免该情况发生,需要进行配置 fanout_patterns 广播模式,以便职程(Worker)只能订阅相关的事件:

app.conf.broker_transport_options = {'fanout_patterns': true}

该设置在将来以后的版本是默认配置。

可见性超时

如果在“可见性超时“内没有完成任务,该任务会重新分配给另外一个职程(Worker)进行执行。

这可能会出现在预计时间超出可见性超时时间的问题,如果出现该问题,任务将重新循环执行。

因此您必须要增加可见性超时时间用于用于匹配最长的执行时间。

注意:Celery会在职程(Worker)关闭的重新分配消息,如果可见性超时时间过长在断电或者强制终止职程(Worker)的情况会“丢失“重新分配的任务。

定期执行任务不会被可见性超时影响,因为这是俩个不同的概念。

您可以通过配置同名的配置选项来扩增可见性超时时间:

app.conf.broker_transport_options = {'visibility_timeout': 432000}

对应的值必须为 int 类型。

驱逐Key

在某些情况下,Redis会根据(驱逐策略)进行驱逐一些key

可能会出现已经错误问题:

InconsistencyError: Probably the key ('_kombu.binding.celery') has beenremoved from the Redis database.

您可以在Redis服务器的 time_out 参数设置为0进行避免key被驱逐。

使用Amazon SQS

略......

celery中间件:broker相关推荐

  1. celery的初次使用

    celery的初次使用 基本步骤: 选择并且安装一个消息中间件(Broker) 安装 Celery 并且创建第一个任务 运行职程(Worker)以及调用任务 跟踪任务的情况以及返回值 应用 创建第一个 ...

  2. python—Celery异步分布式

    python-Celery异步分布式 Celery  是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向brok ...

  3. Celery 框架学习笔记

    在学习Celery之前,我先简单的去了解了一下什么是生产者消费者模式. 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是 ...

  4. python之celery简单使用

    python之celery简单使用 参考:https://blog.csdn.net/zt3032/article/details/79251888 celery是一个简单.灵活和可靠的分布式任务处理 ...

  5. celery 可视化_在Flask中使用Celery进行多任务分布执行

    关键字:Flask, Redis, RabbitMQ, Celery, Broker, Backend 前言 在后端服务器有时候需要处理耗时较长的任务,例如发送电子邮件,在处理这些任务时,这个线程就处 ...

  6. celery java_Celery详解

    Celery详解 1.背景 由于从事区块链钱包相关开发,对于区块链链上资源需要频繁的进行检查同步,在flask项目中,对于celery这个异步任务执行工具,使用的频率算是相当的高,今天,我就来简单总结 ...

  7. flask + celery实现定时任务和异步

    参考资料: Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest ...

  8. Python 第三方库之 Celery 分布式任务队列

    一.Celery介绍和使用: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, ...

  9. Python 并行分布式框架 Celery

    Celery 官网:http://www.celeryproject.org Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index. ...

最新文章

  1. C# 加密解密(DES,3DES,MD5,Base64) 类
  2. 为什么 Java 不支持运算符重载?
  3. 判断string是否为数字
  4. 《THE LEAN STARTUP》 《精益创业》
  5. Java 字节和字符流的读写+Buffered
  6. 计算机教师研修计划书,教师信息技术个人研修计划书
  7. 传真故障排除示例--网络环境存在丢包导致传真失败
  8. 【Elasticsearch】Meltdown对Elasticsearch性能的影响
  9. C++ 在一个cpp文件中使用另一个cpp文件中定义的函数
  10. Java堆分配参数总结
  11. Futter基础第12篇: 实现TabController定义顶部tab切换,并介绍生命周期函数
  12. Java程序性能优化——性能指标
  13. 网络安全系列-二十五: PCAP文件格式详解及读取PCAP文件源码示例
  14. 北美计算机专业申请,美国计算机专业名校TOP5申请深入解读
  15. Cadence Allegro PCB 17.4的叠层、正片和负片的设计
  16. keil5工程函数无法跳转到函数定义解决方法
  17. 代码文本对比-前端工具
  18. Vue3关于页面跳转(push)的时候,并传递数据过去
  19. 网页服务器修复,网页被劫持 网页被劫持后跳转发布网修复方法
  20. 什么是5G(漫画解释)

热门文章

  1. CSDN湘苗培优,打造高素质技术人才
  2. Go后台项目架构思考与重构 | 深度长文
  3. Enhanced-RCNN: 一种高效的比较句子相似性的方法 |​WWW 2020
  4. 60+业内技术专家,9大核心技术专题,AI ProCon倒计时一周!
  5. 如何确定最佳训练数据集规模?6 大必备“锦囊”全给你了
  6. 微信高级研究员解析深度学习在NLP中的发展和应用 | 公开课笔记
  7. 又一名逃犯在张学友演唱会被 AI 捕获,人送绰号“热心歌神张先生”
  8. 10大机器学习开源项目推荐(Github平均star为1385)
  9. Java 18 要来了,你不会还在用Java 8吧?
  10. 面试官:你能说说MyBatis拦截器原理吗?