2014-02-19 184 views
2

我想檢查給定的rabbitmq隊列是否爲空。 對於我試圖使用方法:從java代碼獲取rabbitmq隊列中消息的數量

channel.queueDeclarePassive(queueName).getMessageCount(). 

使用此我總是得到0作爲答案,不論由rabbitmqctllist_queues顯示的郵件數量。 據我所搜索,沒有可用的API。

我想要得到與rabbitmqctllist_queues給出的答案相同的答案。請建議一種方法來實現。

+0

嘗試使用'channel.queueDeclare'代替 – pinepain

+0

與此也..沒有運氣嘗試..仍然給0作爲答案.. – user3184719

回答

5

您無法使用SDK獲取郵件數量。 channel.queueDeclarePassive(queueName).getMessageCount()通常不正確,因爲它不會對等待確認的消息進行計數。

您可以啓用管理插件,並通過REST API查詢隊列:

http://localhost:15672/api/queues/vhost/queue_name 

響應包含的總郵件數以及在處理/就緒狀態消息。 訪問「localhost:15672/api」以查看有關如何調用它的更多詳細信息。

這裏是它的本地服務器上的例子迴應:

{ 
    "memory":14680, 
    "message_stats":{ 
     "publish":1, 
     "publish_details":{ 
      "rate":0 
     } 
    }, 
    "messages":1, 
    "messages_details":{ 
     "rate":0 
    }, 
    "messages_ready":1, 
    "messages_ready_details":{ 
     "rate":0 
    }, 
    "messages_unacknowledged":0, 
    "messages_unacknowledged_details":{ 
     "rate":0 
    }, 
    "idle_since":"2014-02-21 18:01:54", 
    "policy":"", 
    "exclusive_consumer_tag":"", 
    "consumers":0, 
    "backing_queue_status":{ 
     "q1":0, 
     "q2":0, 
     "delta":[ 
      "delta", 
      0, 
      0, 
      0 
     ], 
     "q3":0, 
     "q4":1, 
     "len":1, 
     "pending_acks":0, 
     "target_ram_count":"infinity", 
     "ram_msg_count":1, 
     "ram_ack_count":0, 
     "next_seq_id":1, 
     "persistent_count":0, 
     "avg_ingress_rate":0, 
     "avg_egress_rate":0, 
     "avg_ack_ingress_rate":0, 
     "avg_ack_egress_rate":0 
    }, 
    "status":"running", 
    "name":"01d99c41-7e08-4122-a7f3-c57d25a460f5", 
    "vhost":"/", 
    "durable":true, 
    "auto_delete":false, 
    "arguments":{ 
    }, 
    "node":"[email protected]" 
} 
+0

感謝@junius它是真的很有幫助。 – user3184719

+0

我正在嘗試這樣做,但它對我無效。 :(我可以打開../api,也../api/queues,但../api/queues/vhost和../api/queues/vhost/queue_name no。你知道我能做些什麼嗎?工作?你提到,你可以啓用管理插件''他的意思是什麼?謝謝! –

+1

'http:// localhost:15672/api/queues /%2f/hello' - 其中'hello'隊列名稱,'/ ' - 虛擬主機名稱 – sharp

0

使用下面的鏈接直接通過HTTP API訪問的細節,

http://public-domain-name:15672/api/queues/%2f/queue_name

或使用後從本地主機CLI PROMT命令,

curl -i -u guest_uname:guest_password http://localhost:15672/api/queues/%2f/queue_name

其中, %2F是默認的虛擬主機「/」