MongoDB 2.4.4 レプリカ セットをバックエンドとして Celery 3.0.15 を使用しています (pymongo バージョン 2.5.1)。また、メインのアプリケーション データ ストレージとして同じレプリカ セットを使用します。
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 にアクセスできません。
アップデート
問題を解決したconn.refresh()
後に手動で呼び出す。この場合、正しく動作していないようですAutoReconnect
。MonitorThread