2010-02-04 29 views
3

我有一个消息传递问题(带有MSMQ),它是快速生产者/慢速消费者的变体。有没有办法在私人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++; 
    } 

我的配置:赢XP/2003 MSMQ 3.0

回答

2

我没有使用MSMQ本身,但我有一个食谱我发现很有用。

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

的“生产者”消耗从来自消费者的队列中的项目,并发送一个新的信息传递给消费者。消费者每次消费时,都会在队列中向生产者发送新消息。

所以在这种方式中,“令牌”提供了从消费者到生产者是节流的生产者到消费者的速度反馈。

如果合适的话是用于向简单地返回的消息,而不是每次新鲜分配甲技巧。如果它的单进程和消息数据量大且固定,这本身就可以成为采用这种设计的强大驱动力。

+0

这绝对有可能。但是,我正在使用单向消息传递范例,并希望我不必使用acks/response令牌。 – user35559 2010-02-04 17:00:28