繁体   English   中英

从 RabbitMQ 获取消费者数量

[英]Fetch consumer count from RabbitMQ

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

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 admin 来完成,但我需要用 C# 来完成。 如果我能提供更多细节,请告诉我。

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

你可以这样做:

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

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

请参阅文档上的IModal.ConsumerCount()

在 golang 中,有一个方法叫做QueueInspect ,它会返回消费者计数:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM