将 celery 配置为等待后端服务启动



启动芹菜时,它会重试连接到我的 rabbitmq 代理,这给了它必要的加载时间。这很好,因为我使用的是 docker,我无法保证服务的启动顺序以及哪个服务将在何时启动。

然而,在尝试连接到我设置为结果后端的本地 mysql 服务器时,芹菜没有使用相同的怜悯措施并立即死亡,合理地抱怨它无法锁定 mysqld 套接字:

OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")

我想将芹菜配置为在放弃之前重试几次,这可能吗?

谢谢!

Celery 在幕后使用 SQLlchemy,它没有开箱即用的连接重试功能,但是,您可以调整连接超时,等待更长的 MySQL 服务器,默认情况下此值仅为 10s,较大的值有所帮助。

假设你使用 pymysql/mysqldb 作为 DB 驱动程序,它接受一个connect_timeout选项,要从 Celery 指定此选项,你需要 setdatabase_engine_options,这将传递给 sqlalchemy 的create_engine函数,并设置connect_args,它将直接从 sqlalchemy 传递给 DB 驱动程序,例如:

app.conf.database_engine_options = {'connect_args': {'connect_timeout': 600}}

另一种选择是使用自定义连接creator功能,自行管理连接的创建,您可以根据需要重试任何时间。

您可以在 docker-compose 中尝试depends_on选项。它定义要启动的服务的顺序。您可以在此处找到官方文档。

相关内容

  • 没有找到相关文章