从RabbitMQ获取消费者数量

时间:2017-02-01 12:51:32

标签: c# rabbitmq

我正在尝试获取RabbitMQ中特定队列的消费者总数。我使用RabbitMQ客户端在.Net中编写了我的代码。

string user = ConfigurationManager.AppSettings["rmq_user"];
string pword = ConfigurationManager.AppSettings["rmq_pass"];
string port = ConfigurationManager.AppSettings["rmq_port"];
string host = new Uri(ConfigurationManager.AppSettings["rest_api_url"]).Host;
var factory = new ConnectionFactory();
factory.Uri = "amqp://" + user + ":" + pword + "@" + host + ":" + port;
using (var connection = factory.CreateConnection())
{
    using (var channel = connection.CreateModel())
    {
        var consumerCount = ((RabbitMQ.Client.Impl.ModelBase)(channel)).m_consumers;
    }
}

我得到var consumerCount = ((RabbitMQ.Client.Impl.ModelBase)(channel)).m_consumers;为0.但是我可以看到RabbitMQ网络中的消费者,并确保消费者确实存在于该队列中。 这是获取消费者数量的正确方法还是我做错了什么?我知道这可以使用RabbitMQ管理员完成,但我需要在C#中完成。 如果我能提供更多细节,请告诉我。

3 个答案:

答案 0 :(得分:1)

它没有工作,因为您没有指定您想要消费者的队列。

您可以按照以下方式执行此操作:

 using (var connection = factory.CreateConnection())
        {

            using (var channel = connection.CreateModel())
            {
                var queueDeclareOK = channel.QueueDeclarePassive(QueueName);
                var consumerCount = queueDeclareOK.ConsumerCount;
            }
        }

答案 1 :(得分:0)

请参阅docs

上的IModal.ConsumerCount()

答案 2 :(得分:0)

在golang中,有一个方法叫做QueueInspect,它会返回consumer count:

queue, err := channel.QueueInspect(queueName)
if err != nil {
    return errors.New("fail to inspect queue " + queueName + "err: " + err.Error())
}
fmt.Println("consumer count is ", queue.Consumers)