在RabbitMQ中获取总消息数

时间:2015-02-23 10:01:38

标签: .net rabbitmq message-queue

我需要知道来自.NET客户端的RabbitMQ中的总消息。我知道最好的解决方案是使用API​​ HTTP但我无法正常工作。

我使用已发布消息的确认,但我不知道为什么它不起作用。

我使用此代码在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条消息。如果我使用此代码(发布消息后等待1秒):

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

然后它正常工作,日志写“剩下1条消息”

我认为RabbitMQ会持续几秒钟来更新来自HTTP API的消息计数,或者它不会在WaitForConfirmsOrDie函数中等待。

你能帮我吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

查看管理插件中的统计间隔:https://www.rabbitmq.com/management.html#statistics-interval

默认情况下,数据库每5秒更新一次,但您可以对其进行配置。请记住,如果减少该值,性能将受到影响,因为管理DB将执行更多写入