当启动芹菜时,它重试连接到我的rabbitmq代理,这给它加载了必要的时间。这很好,因为我使用的是docker,我无法保证服务的启动顺序以及确切的服务时间。
然而,当我尝试连接到我设置为结果后端的本地mysql服务器时,芹菜不会使用相同的怜悯度量并立即死亡,合理地抱怨它无法锁定mysqld套接字:< / p>
OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
我想在放弃之前配置芹菜重试几次,这可能吗?
谢谢!
答案 0 :(得分:3)
celery在后台使用sqlalchemy,它没有开箱即用的连接重试功能,但是,您可以调整连接超时,以等待mysql服务器更长的时间,默认情况下此值只有10s,较大的值有助于
假设您使用pymysql / mysqldb作为数据库驱动程序,它接受一个connect_timeout
选项,要从celery中指定此选项,您需要设置database_engine_options
,它应为passed to { sqlalchemy的{3}}函数,并设置create_engine
,它将直接从sqlalchemy传递给数据库驱动程序,例如:
app.conf.database_engine_options = {'connect_args': {'connect_timeout': 600}}
另一种选择是使用自定义连接connect_args
函数,由您自己管理连接的创建,您可以根据需要重试。
答案 1 :(得分:1)
您可以在docker-compose中尝试depends_on
选项。它定义了您想要启动的服务的顺序。您可以找到official documentation here。