几个月后消息队列失败

Message queueing fails after a few months

前几天我们在使用 MSMQ 时遇到了问题,我正在尝试了解发生了什么。

我们有大约 10 个服务相互发送消息。一些使用 WCF,另一些直接使用 System.Messaging.

在某些时候,不会再发送一条消息,所有日志都会填满

"Insufficient resources to perform this operation"

消息小于 4MB,它已经工作了很多个月,所以消息大小不是问题。

进一步查看 msmq\storage 文件夹,其中有 1.07 GB 的消息文件,其中 950 MB 是以 'j'.

开头的文件

j0002f0e.mq j0002f0f.mq etc

这些消息代表日志文件,实际上每天发送数千条消息的一个 (WCF) 服务使用了 SourceJournal enabled.All 这些文件的大小为 4MB,它们最多包含来自过去的多个队列消息。

这可能是原因吗?是否有 1GB 的限制,日志消息堆积并且 MSMQ 开始失败然后一般资源不足?

是否应每隔一段时间清除一次日志队列,以便存储文件夹(几乎)为空?

日记消息与任何其他消息一样。它们会占用 space,直到您的应用程序对它们执行某些操作。它们不像系统会在一段时间后清除的临时文件。这个想法是,如果启用了日记功能(在消息或队列级别),那么消息很重要,否则您不会首先打开它。处理日志消息应该是您的应用程序的一部分(或至少是正式维护过程的一部分)。

日志记录有配额,就像普通消息一样。