2012-07-12 15 views
9

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

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

私はグーグルで見つかった、以前のバージョン1.0にあったクラス "RabbitBrokerAdmin"が見つかりました。 今は1.1にはないと思います。

現在のキューサイズを取得するためのポインタはありますか?次のように

答えて

14

は、だから私は、これは少し遅れている知っていると解決策がすでに判明しているが、ここで見て別の方法ですメッセージは、キュー

このソリューションは、あなたが春の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)

+0

感謝し取り付けた現在の消費者を読み取るために、このソリューションを使用することができ、私もそれを試してみてくださいでしょう。 – hellojava

+0

は魅力のように動作します、ありがとうございます! – Zarathustra

+0

これははるかに良い答えです。はるかにハッキー。 –

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(); 
} 
関連する問題