Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MSMQ用于持久性?_C#_Persistence_Msmq - Fatal编程技术网

C# MSMQ用于持久性?

C# MSMQ用于持久性?,c#,persistence,msmq,C#,Persistence,Msmq,在我的项目中,我从客户机接收一个事务,然后处理它并通过WCF将状态返回给客户机。正如您所知,我必须以某种方式保存事务以用于恢复和持久性 我正在考虑为此使用MSMQ。当事务开始时,我将在MSMQ上“保存”它(出于性能原因,数据库保存将成批进行) MSMQ对这有好处吗?您知道创建持久性的更好方法吗?“备份”事务并保持高性能的最佳方法是什么?数据库和文件系统使用的一种流行方法称为预写日志记录。这并不是一件微不足道的事情。你可以在这里找到详细信息 我想你在找。10年前我们在MSMQ上所做的一切,现在都是

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

我正在考虑为此使用MSMQ。当事务开始时,我将在MSMQ上“保存”它(出于性能原因,数据库保存将成批进行)


MSMQ对这有好处吗?您知道创建持久性的更好方法吗?“备份”事务并保持高性能的最佳方法是什么?

数据库和文件系统使用的一种流行方法称为预写日志记录。这并不是一件微不足道的事情。你可以在这里找到详细信息


我想你在找。10年前我们在MSMQ上所做的一切,现在都是在服务代理上做的。它很好用。

< P>当我选择一项技术时,我认为不仅可以考虑技术满足你的需求,而且考虑它是否被设计来满足你的需要。我的意思是,你应该选择最好的选择,而不仅仅是第一个看起来足够好的选择。您可能可以通过日志记录、文本文件或其他各种方式来解决这个问题,但这并不意味着您应该这样做

在这种情况下,我的优先顺序是

  • 数据库
  • MSMQ
  • 其他一切
  • 如果出于任何原因无法将事务保存到数据库,那么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();
    
    然后稍后通过查询属性检索它们:。还有很多其他现成的功能,但请保持简单

    一些相关问题:


    Service Broker很棒,但它依赖于数据库可用性和响应时间,这可能是OP正在努力解决的问题。这适用于任何事务性排队系统,因此与特定产品无关。@Chrismith是针对我的吗?使用提及以便得到通知:)在这种情况下,MSMQ将在Web服务器本身上运行,因此不存在“可用性”问题-如果Web服务器联机,则消息存储也联机,而数据库通常在另一台计算机上运行。而且响应时间很长,因为MSMQ在本地运行,而数据库可能在地球的另一端。@KirkBroadhurst:很抱歉,遗漏了这一点:)那么当您需要两台web服务器时会发生什么呢?如果你需要扩大规模,沟通是不可避免的。@Chrismith这是真的-我们并不真正了解全貌。每个Web服务器拥有自己的队列可能就足够了——只要事务被保留在“某处”,它就足够了。正如我在回答中所说的,只要有可能,我总是倾向于使用数据库作为第一个呼叫端口。你能回答吗?