11

Java クライアントとして Spring amqp 1.1 バージョンを使用しています。約 2000 のメッセージを持つキューがあります。このキューのサイズをチェックし、空の場合は「すべてのアイテムが処理されました」というメッセージを送信するサービスが必要です。

現在のキュー サイズを取得する方法がわかりません。助けてください

以前のバージョン 1.0 に存在していたクラス「RabbitBrokerAdmin」をググって見つけました。現在、1.1には存在しないと思います。

現在のキュー サイズを取得するための指針はありますか?

4

2 に答える 2

21

これは少し遅れており、解決策は既に見つかっていますが、キュー内のメッセージ数を確認する別の方法を次に示します。

このソリューションは、Spring rabbitmq フレームワークを使用しており、次のタグが定義されたアプリケーション構成でキューを定義していることを前提としています

<rabbit:queue>
<rabbit:admin>

Java クラス:

public class QueueStatsProcessor {
    @Autowired
    private RabbitAdmin admin;
    @Autowired
    private List<Queue> rabbitQueues;

    public void getCounts(){
        Properties props;
        Integer messageCount;
        for(Queue queue : rabbitQueues){
            props = admin.getQueueProperties(queue.getName());
            messageCount = Integer.parseInt(props.get("QUEUE_MESSAGE_COUNT").toString());
            System.out.println(queue.getName() + " has " + messageCount + " messages");
        }
    }
}

このソリューションを使用して、キューに接続されている現在のコンシューマーを読み取ることもできます http://docs.spring.io/spring-amqp/docs/1.2.1.RELEASE/api/org/springframework/amqp/rabbit/core/RabbitAdmin .html#getQueueProperties(java.lang.String)

于 2014-03-03T20:23:16.997 に答える
10

次のように、RabbitAdmin インスタンスを使用してキューから詳細を取得できます。

@Resource RabbitAdmin admin;
...
protected int getQueueCount(final String name) {
    DeclareOk declareOk = admin.getRabbitTemplate().execute(new ChannelCallback<DeclareOk>() {
        public DeclareOk doInRabbit(Channel channel) throws Exception {
            return channel.queueDeclarePassive(name);
        }
    });
    return declareOk.getMessageCount();
}
于 2012-08-27T19:31:01.667 に答える