再起動されたRabbitMQサーバー交換でキューを検出できるpythonクライアントが必要であり、クライアントを起動して各キューからのメッセージの消費を再開します。RabbitMQ 互換の python api/library からキューを検出するにはどうすればよいですか?
8 に答える
サーバーを管理するための直接的な AMQP の方法はないようですが、Python から実行できる方法があります。サブプロセスモジュールをコマンドと組み合わせて使用しrabbitmqctl
て、キューのステータスを確認することをお勧めします。
Linuxでこれを実行していると仮定しています。コマンドラインから、以下を実行:
rabbitmqctl list_queues
結果は次のとおりです。
Listing queues ...
pings 0
receptions 0
shoveled 0
test1 55199
...done.
(まあ、私の場合は特定のキューのためにそうでした)
コードで、このコードを使用して次の出力を取得しますrabbitmqctl
。
import subprocess
proc = subprocess.Popen("/usr/sbin/rabbitmqctl list_queues", shell=True, stdout=subprocess.PIPE)
stdout_value = proc.communicate()[0]
print stdout_value
次に、自分で使用するために解析する独自のコードを考え出しstdout_value
ます。
私の知る限り、これを行う方法はありません。これは Python とは関係ありませんが、AMQP ではキューの検出方法が定義されていないためです。
いずれにせよ、AMQP ではキューを宣言するのはクライアント (コンシューマー) です。パブリッシャーはルーティング キーを使用して交換にメッセージを発行し、コンシューマーはそれらのルーティング キーがどのキューに移動するかを決定します。したがって、コンシューマが存在しない場合にキューについて話すことは意味がありません。
プラグインrabbitmq_managementを追加できます
sudo /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
sudo service rabbitmq-server restart
次に、rest-apiを使用します
import requests
def rest_queue_list(user='guest', password='guest', host='localhost', port=15672, virtual_host=None):
url = 'http://%s:%s/api/queues/%s' % (host, port, virtual_host or '')
response = requests.get(url, auth=(user, password))
queues = [q['name'] for q in response.json()]
return queues
この例ではrequestsライブラリを使用していますが、それほど重要ではありません。
また、私たちのためにそれを行うライブラリを見つけました-pyrabbit
from pyrabbit.api import Client
cl = Client('localhost:15672', 'guest', 'guest')
queues = [q['name'] for q in cl.get_queues()]
私はRabbitMQの初心者なので、これを少し理解してください。ただし、興味深い管理プラグインがあります。これにより、HTTPインターフェイスが「ここから、交換、キュー、バインディング、仮想ホスト、ユーザー、およびアクセス許可を管理できます。UIがうまくいけばかなり自明です。」
http://www.rabbitmq.com/blog/2010/09/07/management-plugin-preview-release/
https://github.com/bkjones/pyrabbitを使用しています。これは、RabbitMQ の mgmt プラグインの API インターフェイスと直接対話し、RabbitMQ に問い合わせるのに非常に便利です。
管理機能は、AMQP の将来のバージョンで提供される予定です。そのため、今のところ、その機能が付属する新しいバージョンまで待つ必要があります。
pyrabbit は私にはうまくいきませんでした。ただし、管理プラグイン自体には、独自の管理 GUI からダウンロードして後で使用できる独自のコマンド ライン スクリプトがあります (たとえば、私は
http://localhost:15672/cli/
ローカル用)