私はJavaクライアントを持っています。このコードで現在キューにあるメッセージの数を取得できます
@Resource
RabbitAdmin rabbitAdmin;
..........
DeclareOk declareOk = rabbitAdmin.getRabbitTemplate().execute(new ChannelCallback<DeclareOk>() {
public DeclareOk doInRabbit(Channel channel) throws Exception {
return channel.queueDeclarePassive("test.pending");
}
});
return declareOk.getMessageCount();
次のような追加の詳細情報を入手したい-
Javaクライアントでこれらのデータを取得する方法はありますか?
AMQPプロトコル(RabbitMQ実装を含む)では、100%の保証ではそのような情報を取得できません。
メッセージ数に最も近い数は、Javaの_queue.declare-ok
_( _AMQP.Queue.DeclareOk
_ で返されるメッセージ数です。 = AMQPクライアントライブラリ)。
_queue.declare-ok
_を使用して受信したメッセージ数は、キューに登録された正確なメッセージ数と一致する可能性がありますが、トランザクション中に確認応答を待っているか、キューに発行されたがまだコミットされていないメッセージはカウントしないため、信頼できません。
それは本当にどのような精度が必要かによります。
エンキューされたメッセージの本文については、キュー内のすべてのメッセージを手動で抽出し、本文を表示して、キューに戻すことができます。これがあなたが望むことをする唯一の方法です。
Management Plugin 、 RabbitMQ Management HTTP API および rabbitmqctl util(list_queues、list_channelsを参照)。
キューが作成されてからパブリッシュされたメッセージの総数を取得することはできません。そのような統計は役に立たない間は実装されていないと思います(FYI、メッセージフローが平均10k /秒の場合、数千年でuint64に到達しません)。
AMQP.Queue.DeclareOk dok = channel.queueDeclare(QUEUE_NAME, true, false, false, queueArgs);
dok.getMessageCount();
Http api経由でキューの詳細にアクセスするには、
http://public-domain-name:15672/api/queues/%2f/queue_name
Localhost cli promtからコマンドを使用してキューの詳細にアクセスするには、
curl -i -u guest_uname:guest_password http://localhost:15672/api/queues/%2f/queue_name
ここで、%2fはデフォルトの仮想ホスト「/」です