MSMQ的持久性?

时间:2011-11-06 20:49:31

标签: c# persistence msmq

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

我正在考虑将MSMQ用于此目的。当事务开始时,我将它“保存”在MSMQ上(出于性能原因,数据库保存将以批处理方式进行)。

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

3 个答案:

答案 0 :(得分:5)

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

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

  1. 数据库
  2. MSMQ
  3. 其他一切
  4. 如果由于某种原因无法将事务保存到数据库,那么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();
    

    然后通过查询属性检索它们:MSMQ querying for a specific message。开箱即用还有很多其他功能,但要保持简单。

    一些相关的问题:

答案 1 :(得分:3)

我认为您正在寻找SQL Server Service Broker。 10年前我们用MSMQ做的一切,我们现在正在与服务经纪人合作。效果很好。

答案 2 :(得分:2)

数据库和文件系统使用的一种流行方法称为预写日志记录。然而,这并非无足轻重。你可以在这里找到详细信息...

Wikipedia: Write-Ahead Logging