2015-02-23 284 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

回答