c# - 消息队列注意事项 - MSMQ 存储问题杀死当前应用程序

标签 c# .net msmq

我正在开发两个使用 MSMQ 作为消息总线机制的应用程序,以便 A 将消息传输到 B。这显然必须是可靠的,因此最初我们选择 MSMQ 来存储和传输消息。

在测试该应用程序时,我们注意到在现实条件下,调用 msmq 以每分钟处理大约 50.000 条消息(对我来说这听起来很低),然后我们很快达到 msmq/storage 目录的最大存储大小(我认为默认为 1.2gb)。

我们可以增加它,但我想知道是否有更好的方法来处理慢速接收者和快速发送者。在这种情况下是否有更好的队列或更好的方法?

实际上,接收速度慢并不是问题,因为 msmq 会将(接收到的)消息保存在存储目录中大约 6 小时或直到服务重新启动。所以基本上,如果我们在 5 分钟内达到 1GB 的阈值,那么在几个小时内我们将达到 terratybes 数据!

最佳答案

请阅读this blog了解 MSMQ 如何使用我在 Microsoft 支持 MSMQ 多年后收集的资源。
它确实涵盖了您需要了解的所有领域。 如果您听说过博客中没有的有关 MSMQ 的信息,那么这几乎肯定是错误的 - 例如 MSMQ 的 1.2GB 存储限制。 msmq\storage 目录的最大大小是硬盘容量——它是一个 NTFS 文件夹! 您应该能够拥有一个包含数百万条消息的队列(假设您有足够的内核内存,如博客中所述)

干杯
约翰·布雷克韦尔

关于c# - 消息队列注意事项 - MSMQ 存储问题杀死当前应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6572135/

相关文章:

c# - 使用 EF Core 3.1 加载相关数据

c# - 开发以管理员身份运行命令的应用程序

asp.net - 通过 MSMQ 分离 Web 和数据库层是必要的还是矫枉过正的?

c# - 将有毒消息移至处理队列

c# - XNA、DirectX 和 Monogame、SharpDX 之间的区别

C#,在不将整个集合加载到内存中的情况下循环遍历 NHibernate 对象的最佳方法

c# - Resharper 无法识别 C# 项目中引用的托管 C++/clr 项目

.net - 进程退出时自动释放信号量

c# - 我将如何编写自己的FirstOrDefaultAsync()方法

msmq - 我们可以在 MSMQ 中添加消息以供将来处理吗