msmq \ storage不断填满多播队列

时间:2017-07-10 16:08:56

标签: storage msmq multicast

我想创建一个简单的发布订阅设置,我的发布者会继续广播消息是否有0,1或更多订阅者和订阅者在他们需要时来来去去并阅读最新消息。我不希望订阅者阅读较旧的消息。对于前者如果发布者上线并开始发布,可以说它发布了100条消息,而目前没有订阅者,我希望这些消息消失。如果订户1上线并且发布了第101条消息,这将是订户1看到的第一条消息。这似乎是多播msmq如何工作但我遇到的问题是当我的发布者正在运行时,\ System32 \ msmq \ storage将迅速填满4mb文件,它们有一些自动增加的名称,在我的情况下通常是r000001a.mq,r000001b.mq或类似的东西。 我不知道如何管理这些文件的创建方式,我的传出多播队列中没有消息,这些文件显示我是否有任何订阅者正在收听。 我可以清除这些文件的唯一方法是重新启动消息队列服务。

我用来发布这些文件的代码是

using (var queue = new msmq.MessageQueue
    ("FormatName:MULTICAST=234.1.1.2:8001"))
{
    var message = new msmq.Message();
    message.BodyStream = snsData.ToJsonStream();
    message.Label = snsData.GetMessageType();
    queue.Send(message);
}

有什么办法可以编程控制这些.mq文件是如何创建的?他们将迅速耗尽允许的队列存储。

谢谢,

1 个答案:

答案 0 :(得分:0)

R * .MQ文件用于存储快递消息。它只是为了效率,而不是恢复,因为它们会在您发现服务重启时被清除。我会使用性能监视器来找出消息所在的队列 - 它们在某个队列中。一旦你知道队列,就可以向后工作 - 如果它是一个自定义队列,检查你的代码;如果它是一个系统队列,那么这将是有趣的。