3

我在 Windows 7 下使用 NServiceBus 3.3.8 和 MSMQ。目前,可恢复和快速消息的发送和接收工作正常。但是,我注意到消息被阅读器消费后,MSMQ 存储区域并没有被清理干净。这导致我在达到允许的最大队列大小时手动清理 MSMQ 存储。

我尝试减少注册表中的MessageCleanupInterval并重新启动 MSMQ 服务,但我仍然没有看到消息被删除。检查存储文件夹中的pxxxxxx.mq文件时,这些文件包含我发送的可恢复和快速消息。

有人知道此消息累积的原因吗?有没有办法通过 MSMQ/NServiceBus 中的一些配置来防止它?

4

1 回答 1

2

空存储文件将在 6 小时后删除。这是出于性能原因 - MSMQ 重新使用现有文件然后创建新文件更快。

如果您打开 P*.MQ 文件,您确实会看到来自先前消息的数据。这与分析硬盘的任何随机扇区完全相同。如果消息已被处理,则存储区域被标记为空闲(在相应的 L*.MQ 文件中),因此它可以被未来的消息覆盖。阅读每条消息后清除存储空间没有任何好处。

如果存储文件只包含一条消息,它们就会挂起。没有碎片整理来压缩存储文件的使用。如果文件在清理间隔或重新启动后没有被清除,则它不是空的。检查 MSMQ 性能计数器以查看整个系统(而不是您感兴趣的队列)是否有任何消息。

“但是,我注意到在消息被阅读器消费后,MSMQ 存储区域没有被清理。这导致我在达到允许的最大队列大小时手动清理 MSMQ 存储。”

这是不正确的。如果您删除存储文件并且不再达到配额,则您必须删除真实邮件以释放空间。空存储文件对您的邮件配额的影响为零。

于 2013-09-30T18:51:03.287 回答