没有人知道,如果有一种检查的数量的信息在一个RabbitMQ队从客户应用程序?

我使用。净客户的图书馆。

有帮助吗?

解决方案

您其实可以通过客户端检索此。当执行一个操作queue_declare RabbitMQ的返回包含(<queue name>, <message count>, <consumer count>)一个三元组。该passive参数queue_declare允许你检查是否存在队列,而无需修改服务器的状态。所以,你可以使用<=>与<=>选项来检查队列长度。不知道.NET,但在Python它看起来是这样的:

name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True)

其他提示

我2年为时已晚,但我正在寻找它自己和发现的RabbitMQ插上U简单的脚本来沟通,在sbin目录文件夹二郎nodes..its其中用于RabbitMQ的启动脚本是located..so你基本上可以说

./rabbitmqctl list_queues

这将显示与队列消息的悬而未决的那些队列的计数沿 同样你也可以说

./rabbitmqctl list_channels
./rabbitmqctl list_connections

等。 欲了解更多信息,您可以访问这里

如果你想做到这一点在.NET中,检查正在使用客户端库的版本。

我使用的 2.2.0 版本和我不得不使用BasicGet(队列,NOACK)。结果 在这个版本的库QueueDeclare(的)仅返回一个包含队列名称的字符串。

BasicGetResult result = channel.BasicGet("QueueName", false);
uint count = result != null ? result.MessageCount : 0;

,点击 我的 2.6.1 版本知道,QueueDeclare()返回类型QueueDeclareOk的对象。结果

QueueDeclareOk result = channel.QueueDeclare();
uint count = result.MessageCount;

,点击 或者,也可以在命令行调用:

<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues

和你看到下面的输出:

  

清单队列...结果QUEUENAME 1结果,...进行。

HTH

我使用的是.NET客户端库版本的 3.3.1

我使用以下,这是非常相似的拉尔夫Willgoss第二建议,但可以作为一个参数提供的队列名称。

QueueDeclareOk result = channel.QueueDeclarePassive(queueName);
uint count = result != null ? result.MessageCount : 0;

更新:显然由于mmalone的非常有帮助的帖子鼠兔实施queue_declare(..)已经改变了

在蟒/鼠(v0.9.5)它仍然可能通过鼠兔检查队列深度,但它需要一个稍微更间接的方法。

queue_declare(...)通过一个方法对象到其回调函数,然后可以检查。例如,要检查中命名的队列中的消息和消费者的数量'myQueue'

def cbInspect(qb):
    messagesInQueue = qb.method.message_count
    print "There are %d messages in myQueue" % messagesInQueue

    consumersInQueue = qb.method.consumer_count
    print "There are %d consumers in myQueue" % consumersInQueue

    return

myChannel = channel.queue_declare(callback=cbInspect, queue='myQueue', passive=True)

希望这会有所帮助,并请宽容我,我是新来的周围: - )

你可以使用的IModel的MessageCount方法,记录在这里

http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v3.6.4/rabbitmq-dotnet-client-3.6.4-client-htmldoc/html/type-RabbitMQ.Client.IModel.html#method-M:RabbitMQ.Client.IModel.MessageCount(System.String)

编辑:我知道这是一个非常古老的职位,但它是第一个谷歌的反应,我希望它将帮助人们在寻找这答案的未来。

我的基于Myydrralls的回答小片段。我想,如果他在他的回答代码我可能会更快地注意到了这一点。

public uint GetMessageCount(string queueName)
{
    using (IConnection connection = factory.CreateConnection())
    using (IModel channel = connection.CreateModel())
    {
        return channel.MessageCount(queueName);
    }
}

至少同样的RabbitMQ 3.3.5的,可以在一个C#程序通过调用的RabbitMQ管理HTTP API这样做没有任何的RabbitMQ客户端库:

// The last segment of the URL is the RabbitMQ "virtual host name". 
// The default virtual host name is "/", represented urlEncoded by "%2F".
string queuesUrl = "http://MY_RABBITMQ_SERVER:15672/api/queues/%2F";

WebClient webClient = new WebClient { Credentials = new NetworkCredential("MY_RABBITMQ_USERNAME", "MY_RABBITMQ_PASSWORD") };
string response = webClient.DownloadString(queuesUrl);

用户名和密码是那些用于登录到的RabbitMQ管理控制台UI相同。

响应将是一个JSON字符串与队列的列表,包括它们的消息计数,其它性质。 (如果你愿意,你可以反序列化JSON到使用像 Json.NET 库中的C#对象。 )

API文档与RabbitMQ的管理控制台一起安装和应提供该服务器上在 HTTP:// MY_RABBITMQ_SERVER: 15672 / API

我能得到的尺寸/深度的队列从蟒蛇的程序。1.使用py_rabbit

    from pyrabbit.api import Client
    cl = Client('10.111.123.54:15672', 'userid', 'password',5)
    depth = cl.get_queue_depth('vhost', 'queue_name')
  1. 海带[python包通常带有芹菜安装]
conn = kombu.Connection('amqp://userid:password@10.111.123.54:5672/vhost')
conn.connect()
client = conn.get_manager()
queues = client.get_queues('vhost')
for queue in queues:
    if queue == queue_name:
    print("tasks waiting in queue:"+str(queue.get("messages_ready")))
    print("tasks currently running:"+str(queue.get("messages_unacknowledged")))

ip地址,只是一个例子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top