我使用Celery 3.0.15和MongoDB 2.4.4副本集作为后端(pymongo版本2.5.1)。我也用同样的副本设置为主要应用的数据存储:MongoReplicaSetClient不会在芹菜工人重新连接
CELERY_CONFIG = {
'BROKER_URL': 'mongodb://localhost:27017,localhost:27018,localhost:27019/',
'BROKER_TRANSPORT_OPTIONS': {
'replicaSet': 'test'
}
}
...
conn = MongoReplicaSetClient(
'localhost:27017,localhost:27018,localhost:27019',
replicaSet='test'
)
我就可以开始一些工人,并使用此conn
实例来从代码中访问内部芹菜任务数据库。
如果mongo初级关闭并重新选举,芹菜工会自动重新连接到新配置。但是,无论我做了多少次重试,而且无论等待多长时间,conn
的所有后续查询都会返回AutoReconnect
异常。
为代理和主数据库分离副本集不能解决问题:工作人员仍能正常重新连接,但我无法从使用相同MongoReplicaSetClient的任务访问mongo。
UPDATE
手动调用AutoReconnect
后conn.refresh()
解决了这个问题。似乎MonitorThread
在这种情况下无法正常工作。