MSMQ - 快速生产者/慢消费者

时间:2010-02-04 16:26:32

标签: msmq semaphore throttling producer-consumer

我的消息传递问题(使用MSMQ)是快速生产者/慢速消费者的变体。有没有办法在私有MSMQ队列中获得未完成的未使用消息计数?我想用它来限制生产者。

我想在MSMQ中使用信号量范例,其中生成器应用程序仅在未完成的消息计数小于指定数量时才发送消息。

基本上,我想做类似以下的事情

///Producer pseudo-code 
    public void SendMessage(Message message, int totalMessagesSentCounter)
    {
       if (totalMessagesSentCounter % 1000 == 0)
       {
         while (outgoingQueue.GetMessageCount() > X)  ///Is this possible?
         {
             Sleep(Y milliseconds);
         }
        }
       outgoingQueue.Send(Message);
       totalMessagesSentCounter++;
    }

我的配置:使用MSMQ 3.0赢取XP / 2003

2 个答案:

答案 0 :(得分:2)

我没有使用MSMQ本身,但我确实有一个我觉得有用的食谱。

而不是单个队列,您有两个队列 - 每个方向一个队列。

'producer'消耗来自消费者的队列中的项目,并向消费者发送新消息。每次消费者消费时,它都会在队列中向生产者发送一条新消息。

因此,通过这种方式,'令牌'提供了消费者对生产者的反馈,生产者将生产者限制为消费者的速度。

如果合适,可以简单地返回消息,而不是每次都进行新的分配。如果它的单进程和消息数据很大且固定大小,这本身就是采用这种设计的强大驱动力。

答案 1 :(得分:1)

我不得不将COM库用于MSMQ。我发现以下链接有所帮助。

http://blog.codebeside.org/archive/2008/08/27/counting-the-number-of-messages-in-a-message-queue-in.aspx