MSMQ的持久性?

guy*_*uyl 5 c# persistence msmq

在我的项目中,我从客户端收到一个事务,然后处理它并通过WCF将状态返回给客户端.如您所知,我必须以某种方式保存事务以进行恢复和持久性.

我正在考虑将MSMQ用于此目的.当事务开始时,我将它"保存"在MSMQ上(出于性能原因,数据库保存将在批处理中发生).

MSMQ对此有利吗?你知道创建持久性的更好方法吗?什么是"备份"交易并保持高性能的最佳方式?

Kir*_*rst 5

当选择一个技术,我认为这是有帮助的考虑,不仅可以在技术满足您的需求,但它也是否被设计以满足您的需求.我的意思是你应该选择最好的选择,而不仅仅是看起来足够好的第一个选项.您可以使用日志记录或文本文件或其他各种方法来解决此问题,但这并不意味着您应该这样做.

我在这种情况下的偏好顺序是

  1. 数据库
  2. MSMQ
  3. 其他一切

如果由于某种原因无法将事务保存到数据库,那么MSMQ可能会在这里帮助您.它应该比打开数据库连接和提交更好,但提供了一个"良好"的持久层.缺点是你的应用程序需要更多的代码和另一个故障点(如果写得不正确,它会失败,但更多的代码意味着更多的错误地方).

您可以使用类似的东西轻松地将事务放入队列中

private string queuePath = @".\Private$\myQueue";
MessageQueue queue = new MessageQueue(queuePath);

Message message = new Messge();
message.Id = "messageId";
message.Body = "my content";

queue.Send(message, transaction);
transaction.Complete();
queue.Close();
Run Code Online (Sandbox Code Playgroud)

然后通过查询属性检索它们:MSMQ查询特定的消息.开箱即用还有很多其他功能,但要保持简单.

一些相关的问题: