2

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()後に手動で呼び出す。この場合、正しく動作していないようですAutoReconnectMonitorThread

4

1 に答える 1