我正在尝试获取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#中完成。
如果我能提供更多细节,请告诉我。
答案 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)