Hãy tưởng tượng tình hình:Lồng ghép RabbitMQ với các giao dịch cơ sở dữ liệu
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();
Bây giờ một người tiêu dùng của EntryUpdatedMessage
khả năng có thể nhận được tin nhắn này trước giao dịch txn
cam kết và do đó sẽ không thể để xem cập nhật. Bây giờ, tôi biết rằng RabbitMQ không hỗ trợ giao dịch của chính nó, nhưng chúng tôi không thể sử dụng chúng bởi vì chúng tôi tạo ra một IModel
mới cho mỗi xuất bản và có một mô hình theo chủ đề thực sự cồng kềnh trong kịch bản của chúng tôi (ứng dụng web ASP.NET).
Tôi đã nghĩ đến việc có một danh sách thư được xuất bản khi giao dịch DB được cam kết, nhưng đó là một giải pháp thực sự có mùi.
Cách xử lý đúng cách này là gì?