状況を想像してみて:データベーストランザクションでのRabbitMQの統合
var txn = new DatabaseTransaction();
var entry = txn.Database.Load<Entry>(id);
entry.Token = "123";
txn.Database.Update(entry);
PublishRabbitMqMessage(new EntryUpdatedMessage { ID = entry.ID });
// A bit more of processing
txn.Commit();
今EntryUpdatedMessage
の消費者が潜在的に前取引txn
がコミットされるため、更新を確認することができません。このメッセージを得ることができます。
RabbitMQはトランザクションを単独でサポートしていますが、実際には使用することはできません。なぜなら、公開ごとに新しいIModel
を作成し、スレッドごとのモデルを作成するのは実際には面倒です(ASP.NET Webアプリケーション)。
DBトランザクションがコミットされたときに公開される予定のメッセージのリストがあると思っていましたが、それは本当にうっとうしい解決策です。
これを正しく処理する方法は何ですか?