celery中间件:broker

celery中间件:broker

 

 

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

 

中间人(Broker)使用指南

 

中间人(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 mypassword

sudo rabbitmqctl add_vhost myvhost

sudo rabbitmqctl set_user_tags myuser mytag

sudo 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 been

removed from the Redis database.

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

 

使用Amazon SQS

略......

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Celery使用自定义broker的方法是通过在配置文件中指定自定义broker的相关信息。首先,您需要确保已经安装了Celery的依赖库,可以使用pip命令进行安装。然后,在配置文件中添加自定义broker的配置信息,包括broker的类型、地址、端口等。接下来,您可以使用Celery提供的API来创建自定义broker的连接,并将其作为参数传递给Celery的实例化对象。这样,Celery就会使用您自定义的broker来进行消息的传递和处理。 引用\[1\]中提到了Celery的自定义消息消费者的实践方法,可以通过继承Task类来自定义消息消费者。您可以根据自己的需求,实现自定义的消息消费逻辑,并在任务中调用相应的方法来处理消息。此外,引用\[2\]中提到了如果使用Redis作为中间人(Broker),需要安装Celery的依赖库,并在安装时指定redis选项。最后,引用\[3\]中提到了使用django-celery来配置delay异步调用,并且对比了使用rabbitmq和redis作为broker的优劣势。 综上所述,要使用自定义broker,您需要在配置文件中指定自定义broker的相关信息,并使用Celery提供的API来创建自定义broker的连接。同时,您可以根据需要继承Task类来自定义消息消费者,并使用相应的方法来处理消息。 #### 引用[.reference_title] - *1* [Celery 自定义消费器](https://blog.csdn.net/abbyinfo/article/details/120966731)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [celery中间件broker](https://blog.csdn.net/weixin_44799217/article/details/111880904)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [为什么要使用celery,以及broker的选择标准](https://blog.csdn.net/weixin_45572139/article/details/106469805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值