57

クライアント アプリケーションから RabbitMQ キュー内のメッセージ数を確認する方法があるかどうかは誰にもわかりませんか?

.NET クライアント ライブラリを使用しています。

4

9 に答える 9

73

これは実際にはクライアント経由で取得できます。

操作を実行するqueue_declareと、RabbitMQ は次の 3 つの値を持つタプルを返します(<queue name>, <message count>, <consumer count>)passive引数を使用queue_declareすると、サーバーの状態を変更せずにキューが存在するかどうかを確認できるため、キューの長さを確認するオプションとqueue_declare一緒に使用できます。passive

.NET についてはわかりませんが、Python では次のようになります。

name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True)
于 2010-03-04T01:37:37.097 に答える
17

私は2年遅すぎますが、私はそれを自分で探していて、rabbitmqがerlangノードと通信するための簡単なスクリプトを提供することを発見しました..RabbitMQの開始スクリプトがあるsbinフォルダーにあります..だからあなたは基本的に言うことができます

./rabbitmqctl list_queues

これにより、キューに保留中のメッセージの数とともにキューが表示されます。同様に、次のように言うこともできます

./rabbitmqctl list_channels
./rabbitmqctl list_connections

など。詳細については、こちらをご覧ください。

于 2010-11-22T16:46:21.020 に答える
16

これを .NET で行う場合は、使用しているクライアント ライブラリのバージョンを確認してください。

私は2.2.0バージョンを使用しており、BasicGet(queue, 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
...完了。

于 2013-02-06T15:55:40.793 に答える
9

.NET クライアント ライブラリのバージョン3.3.1を使用しています。

以下を使用します。これはRalph Willgoss の 2 番目の提案と非常によく似ていますが、引数としてキュー名を指定できます。

QueueDeclareOk result = channel.QueueDeclarePassive(queueName);
uint count = result != null ? result.MessageCount : 0;
于 2016-04-01T07:51:58.780 に答える
6

ここに記載されている 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)

編集:これは非常に古い投稿であることは承知していますが、これが最初の Google の回答であり、将来この回答を探している人々に役立つことを願っています.

于 2016-08-05T16:50:50.903 に答える
5

更新: mmalone の非常に役立つ投稿以降、queue_declare(..) の pika 実装が変更されたようです。

python/pika (v0.9.5) では、pika を介してキューの深さを確認することは引き続き可能ですが、もう少し間接的なアプローチが必要です。

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)

これがお役に立てば幸いです。私を気楽に扱ってください。

于 2012-07-24T18:21:30.480 に答える
3

Pythonプログラムからキューのサイズ/深さを取得できました。

  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. kombu [通常、セロリのインストールには 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 アドレスは単なる例です。

編集:

3

これを行うためのより良い方法を見つけました。curl は、より便利で高速な方法のようです


curl -s -i -u $user:$password http://$host_ip_address:15672/api/queues/$vhost_name/$queue_name | sed 's/,/\n/g' | grep '"messages"' | sed 's/"messages"://g'
于 2019-03-20T16:13:30.213 に答える