2016-11-07 179 views
3

架構

考慮一個帶有DB記錄的系統。每條記錄可以是liveexpired狀態;應使用外部軟件模塊定期處理live記錄。Kombu + RabbitMQ:檢查隊列是否爲空

我已經用Kombu和RabbitMQ的經典生產者 - 消費者體系結構解決了這個問題。生產者每隔幾秒從DB獲取記錄,並由消費者處理它們。

enter image description here

問題

live事件的數量差別很大,並在高峯時段,消費者不能處理負載和隊列堵塞物品萬人。

我想使系統具有適應性,以便生產者在隊列爲空時不會向消費者發送新事件。

有什麼我試圖

  • 搜索海帶文檔/ API
  • 檢查隊列對象
  • 使用RabbitMQ的REST API:http://<host>:<port/api/queues/<vhost>/<queue_name>。它很有效,但它是另一種維護機制,我更喜歡Kombu內部的優雅解決方案。

如何使用Python的Kombu檢查RabbitMQ是否爲空?

回答

0

您可以調用kombu隊列對象上的queue_declare()。

按照docs函數返回:

Returns a tuple containing 3 items: 
     the name of the queue (essential for automatically-named queues) 
     message count 
     consumer count 

因此你可以這樣做:

name, msg_count, consumer_count = queue.queue_declare() 
+0

如何導入隊列?來自kombu進口隊列的 – Kishan

+1

。隊列是一個Queue對象。 – odedfos

+0

可否請您參考文檔鏈接,因爲我無法再在文檔中找到它。 – RexFuzzle