Msmq-如果队列太大则不发送消息?

Msmq-如果队列太大则不发送消息?

我们最近遇到了一个问题,MSMQ(在工作组中的 Windows Server 2008 R2 上)停止发送消息。原来是因为 MSMQ 已达到消息存储限制,因此对所有消息都做出响应,并出现可怕的“资源不足”错误。

到目前为止还算合理,但问题是:据我们所知,占用所有磁盘空间的消息都是发往另一台机器上的队列(我们猜测另一台机器暂时停止接受消息,原因我们还不知道,导致发送 MSMQ 上的所有内容都备份了)。因此,处理这些消息实际上应该可以释放磁盘空间。事实上,我们发现,只要我们取消发送机器上的消息存储限制,消息就会开始发送。而且在稍后的某个时间点(我们不知道具体时间,但这个线程即使队列中没有消息,MSMQ 仍会继续增长表示应该已经 6 小时了),所有占用磁盘空间的 p*****.mq 消息都已被清理,这使我们能够恢复存储限制。

我们认为 MSMQ 会因为超出存储限制而拒绝发送这些消息,因为发送这些消息会释放存储空间,这毫无道理。但我们掌握的所有证据都表明确实发生了这种情况。有人能确认 MSMQ 的行为是否确实如此吗?

答案1

当时传出队列的状态可以提供一些线索。
可能发生的情况如下:

1 MSMQ QM1 发送消息
2 MSMQ QM2 返回确认消息
3 由于超出配额,无法传送确认消息
4 MSMQ QM1 无法完成发送(我假设是事务性消息)
5 转到 1

一旦配额取消,这些步骤就可以顺利完成。

相关内容