我想创建一个简单的发布订阅设置,无论订阅者是0、1还是更多订阅者,我的发布者都会持续广播消息,订阅者在需要和阅读最新消息时来来去去。我不希望较旧的消息被订阅者读取。对于ex。如果发布者在线并开始发布,假设它发布了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文件的创建方式?它们将迅速耗尽允许的队列存储空间。
谢谢,
发布于 2017-07-11 16:19:42
R*.MQ文件用于存储快递消息。这只是为了提高效率,而不是为了恢复,因为你会发现它们在服务重启时会被清除。我会使用Performance Monitor来找出消息在哪个队列中--它们必须在某个队列中。一旦你知道了队列,你就可以反向工作了--如果它是一个自定义队列,检查一下你的代码;如果它是一个系统队列,那就很有趣了。
https://stackoverflow.com/questions/45016867
复制相似问题