2016-11-07 23 views
3

アーキテクチャ

DBレコードを持つシステムを考えてみましょう。各レコードはliveまたはexpiredのステータスになります。 liveレコードは、外部ソフトウェアモジュールを使用して定期的に処理する必要があります。Kombu + RabbitMQ:キューが空であるかどうかを調べる

私はKombuとRabbitMQの古典的なプロデューサ - コンシューマアーキテクチャを使用してこれを解決しました。プロデューサは数秒ごとにDBからレコードを取り出し、コンシューマがそれらを処理します。

enter image description here

問題

liveイベントの数が大幅に変化し、ピーク時間帯に、消費者が負荷を処理することはできませんし、キューがアイテムの千と詰まっています。

システムを適応させて、キューが空の場合にプロデューサが新しいイベントをコンシューマに送信しないようにしたいと思います。 http://<host>:<port/api/queues/<vhost>/<queue_name>

は私がRabbitMQのREST APIを使用して、キューオブジェクト
  • を点検
  • 昆布のドキュメント/ APIの検索
    • 何を試してみました。それは機能しますが、それはまだ維持するもう1つの仕組みです。私は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はQueueオブジェクトです。 – odedfos

    +0

    ドキュメントでこれを見つけることができないため、リンク先のドキュメントを参照してください。 – RexFuzzle

    関連する問題