我们最近遇到了一个问题,即 MSMQ(在工作组中的 Windows Server 2008 R2 上)停止发送消息。事实证明,这是因为 MSMQ 已达到消息存储限制,因此以可怕的“资源不足”错误响应所有内容。
到目前为止很公平,但事情是这样的:据我们所知,用完所有磁盘空间的消息都发往另一台机器上的队列(我们猜测另一台机器暂时停止接受消息由于我们尚未弄清楚的原因,导致发送 MSMQ 上的所有内容都备份)。所以处理这些消息实际上应该释放磁盘空间。事实上,我们发现一旦我们取消了发送机器上的消息存储限制,消息就开始发送了。并且在稍后的某个时间点(我们没有看到什么时候,但是即使队列中没有消息,这个线程 MSMQ 也会继续增长表示应该是 6 小时后),所有占用磁盘空间的 p*****.mq 消息都已清理,使我们能够恢复存储限制。
对我们来说,MSMQ 会因为超出存储限制而拒绝发送这些消息是没有意义的,而发送消息本来可以释放存储空间。但我们拥有的所有证据表明,这就是发生的事情。任何人都可以确认这是否实际上是 MSMQ 的行为方式?