我有一个现有的系统,我想知道如果MSMQueue重新启动,它是否可以保留队列的值。它重新启动时清除该值。
答案 0 :(得分:8)
正如paxdiablo所写,MSMQ是一种持久排队解决方案,但默认情况下不是!默认设置是将消息存储在RAM中,并使MSMQ将消息持久保存到磁盘,以便在服务器崩溃时不会丢失,您必须在EACH消息上指定消息。
如果您查看属性Message.Recoverable,可以找到有关此内容的更多信息。
答案 1 :(得分:8)
正如@ Kjell-ÅkeGafvelin所说,你可以配置每条消息,但恕我直言更方便的方法是在队列上设置 :{{ 3}}
MessageQueue msgQ = new MessageQueue(@".\private$\Orders");
msgQ.DefaultPropertiesToSend.Recoverable = true;
msgQ.Send("This message will be marked as Recoverable");
msgQ.Close();
从上面的文章(由我突出显示):
通过默认,MSMQ会将一些消息存储在内存中以进行增加 性能,可以从队列发送和接收消息 没有写入磁盘。
另外,您应该使队列交易以保证正确的发货和接收消息。
答案 2 :(得分:0)
是的,MSMQ是持久性排队解决方案。它将消息安全地存储在后备存储上,不会受到电源断电的影响(除非您遇到类似磁盘的情况,当然,除了真正大规模的电源浪涌之外)。
其重点是在可能不可靠的环境中提供可靠的消息排队。为此,当特定服务器出现故障时丢失消息将是一个相当大的劣势。
来自Microsoft's own pages(并为销售推销语言道歉):
消息队列应用程序可以使用消息队列基础结构跨异构网络和可能脱机的计算机进行通信。消息队列提供保证消息传递,高效路由,安全性,事务支持和基于优先级的消息传递。