【问题标题】:Get total messages count in RabbitMQ获取 RabbitMQ 中的消息总数
【发布时间】:2015-04-24 14:50:08
【问题描述】:

我需要知道来自 .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 message left”

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

你能帮帮我吗?

提前谢谢你。

【问题讨论】:

标签: .net rabbitmq message-queue


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-07-15
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多