【问题标题】:Is it feasible to often switching between redis and rabbitmq in celery?celery中经常在redis和rabbitmq之间切换是否可行?
【发布时间】:2022-01-04 05:43:36
【问题描述】:

在生产中,当我们使用 redis 作为消息代理时,我们会遇到一些在 celery 中发生的未知错误。所以我们考虑迁移到rabbitmq,直到错误得到修复。这样以后,如果其中任何一个有任何错误,我们都可以在它们之间快速切换。这个想法是否可行,是否有可能实现?

提前致谢

【问题讨论】:

    标签: python redis rabbitmq celery messagebroker


    【解决方案1】:

    一般来说,是的,传输是可以互换的,但有一些注意事项。当您在支持的经纪人之间进行交换时,Celery 的工作方式相同。然而,了解 Celery 在您使用时为您提供了哪些合约以及哪些行为可能是特定于代理的,这一点很重要。

    注意事项:

    1. 某些 celery 设置/功能取决于特定的传输方式。 (例如broker_use_ssl设置只对redis和amqp有效,对rabbitmq无效)

    2. 不同的代理有不同的默认设置/行为(例如,redis 默认为 1 小时可见性超时,SQS 默认使用 30 秒)

    3. 除了与 默认值 的差异之外,您的代理可以配置为完全独立于您的应用程序配置/芹菜设置(例如,创建 SQS 队列时的队列设置)。

    4. 您必须考虑数据/消息丢失的可能性。当您切换时,队列中的任何正在进行的消息或消息都将丢失。因此,您需要确保优雅地处理交换以避免丢失消息——或者换句话说:当您在传输之间切换时,您需要迁移或重新传递任何现有消息。同样,现有的rate limit 计数器不会转换,消息重复数据删除机制也不会转换,等等。

    5. 必须重新启动工作器才能使代理更改生效。设置不能“即时”更改或自动响应错误。

    所以,是的,您可以随时更改传输方式。但是,这可能不是增加容错或自动故障转移的好策略,尤其是因为注意事项 (4) 和 (5)。

    【讨论】:

    • 所以可以在设置中定义多个代理,还是每次切换时我都必须替换代理相关设置?
    • @Vanjith 您每次都必须更改设置。每个 Celery 应用程序都只有一个代理配置。不过,原则上,您可以同时运行具有两种配置的两个 celery 应用程序。这可能可以用足够的胶水为您提供与您正在寻找的类似的效果。但这可能比它的价值更多。
    猜你喜欢
    • 2019-02-22
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2010-10-25
    • 1970-01-01
    • 2012-11-20
    • 2011-05-12
    相关资源
    最近更新 更多