2010-02-04 72 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