我在Windows 7下使用NServiceBus 3.3.8和MSMQ。目前发送和接收对于可恢复和快速消息都正常工作。但是,我注意到在阅读器使用消息后,MSMQ存储区域未被清除。这导致我在达到允许的最大队列大小时手动清理MSMQ存储。
我尝试在注册表中减少 MessageCleanupInterval 并重新启动MSMQ服务,但我仍然没有看到消息被删除。检查存储文件夹中的 pxxxxxx.mq 文件时,这些文件包含我发送的可恢复和快速邮件。
有没有人知道这条消息累积的原因?有没有办法在MSMQ / NServiceBus中使用某些配置来阻止它?
答案 0 :(得分:1)
6小时后删除空存储文件。这是出于性能原因 - MSMQ更快地重新使用现有文件然后创建一个新文件。
如果打开P * .MQ文件,您确实会看到以前消息中的数据。这与分析硬盘的任何随机扇区完全相同。如果已处理消息,则存储区域将标记为空闲(在相应的L * .MQ文件中),以便将来可能会覆盖该消息。读取每条消息后,清除存储空间没有任何好处。
如果存储文件只包含一条消息,它们就会挂起。没有碎片整理来压缩存储文件的使用。如果在清理间隔或重新启动后文件未被清除,则它不为空。检查MSMQ性能计数器以查看整个系统(而不仅仅是您感兴趣的队列)是否有任何消息。
“但是,我注意到之后没有清理MSMQ存储区域 消息由读者使用。这导致我 当MSMQ存储达到允许的最大值时,手动清理它 队列大小。“
这是不正确的。如果删除存储文件并且不再访问配额,则必须删除实际消息以释放空间。空存储文件对您的邮件配额没有任何影响。