2015-02-23 39 views
0

我需要從.NET客戶端了解RabbitMQ中的總消息。我知道最好的解決方案是使用API​​ HTTP,但我無法正常工作。在RabbitMQ中獲取總消息數

我使用已發佈消息的確認,但我不知道爲什麼它不起作用。

我使用此代碼,以便在RabbitMQ的發佈消息:

private void message(string text) 
{ 
    var factory = new ConnectionFactory() { HostName = hostName, UserName = user, Password = password }; 
    using (var connection = factory.CreateConnection()) 
    using (var channel = connection.CreateModel()) 
    { 
     try 
     { 

      channel.ExchangeDeclare(exchangeNameProducer, "direct", true); 
      channel.QueueDeclare(queueNameProducer, true, false, false, null); 
      channel.ConfirmSelect(); 
      channel.QueueBind(queueNameProducer, exchangeNameProducer, ""); 
      var body = Encoding.UTF8.GetBytes(text); 
      channel.BasicPublish(exchangeNameProducer, "", null, body); 
      channel.WaitForConfirmsOrDie(); 
      log("After WaitForConfirm ,messageCount = " + this.getMessagesCount() + " ; message = " + text); 
     } 
     catch (Exception e) 
     { 
      log(e.Message); 
     } 
    } 
} 

「getMessagesCount」功能要求以HTTP API知道總消息計數。注意我使用WaitForConfirmsOrDie和ConfirmSelect函數來等待消息發佈。

在我的示例中,消費者花30秒處理消息。 但是,日誌始終打印剩餘的0條消息,但如果我調試代碼,日誌會打印剩餘的1條消息。

channel.BasicPublish(exchangeNameProducer, "", null, body); 
channel.WaitForConfirmsOrDie(); 
Thread.Sleep(1000); 
log("After WaitForConfirm ,messageCount = " + this.getMessagesCount() + " ; message = " + text); 

然後它工作正常和日誌寫入「1條留言左」

我認爲RabbitMQ的持續幾秒鐘更新消息計數:如果我用這個代碼(發佈消息之後等待1秒)來自HTTP API,或者它不會在WaitForConfirmsOrDie函數中等待。

請問您能幫我嗎?

預先感謝您。

+0

如果您需要將消息計入特定隊列中,請執行以下操作:http://stackoverflow.com/questions/17684848/ rabbitmq-get-total-count-of-messages-enqueued,否則沒有其他方法,而不是調用HTTP API(或運行cli工具)。 – pinepain 2015-02-23 17:25:50

回答