私は、rabbitmq メッセージと Django アプリケーションの間にロギング ブリッジを構築して、バックグラウンド タスクの状態をデータベースに保存し、さらに調査/レビューできるようにしています。また、Django 管理インターフェイスを介してタスクを再発行できるようにしています。私はそれが派手なものではなく、単なる標準的な生産者と消費者のパターンだと思います。
- Web アプリケーションがメッセージ キューにパブリッシュし、初期タスク状態をデータベースに挿入する
- 別の Python プロセスであるコンシューマーは、メッセージを処理し、タスクの出力に応じてタスクの状態を更新します。
問題は、一部のタスクがデータベースにないため、実行されないことです。db commit が実行される前に Consumer がメッセージを受信したためだと思われます。したがって、基本的に Model.save() から戻ったからといって、トランザクションが終了して通信全体が中断したわけではありません。
これを修正する方法はありますか?たぶん、ある種の post_transaction シグナルを使用できますか?
前もって感謝します。