RabbitMQキュー管理の必須コマンド:宣言、一覧表示、削除
`rabbitmqctl`コマンドラインインターフェースを使用した必須のキュー管理を習得します。この実践ガイドでは、適切な永続性設定での新しいキューの宣言、効果的な監視のためのカスタムメトリクス(`messages_ready`、`consumers`、`memory`)を使用したキューの一覧表示、運用上のバックログ管理のための安全なキュー削除またはパージなど、日常のRabbitMQ管理に必要な基本的な操作をカバーします。安定した高性能なメッセージングインフラストラクチャを確保するための正確なコマンドとベストプラクティスを学びます。
RabbitMQキュー管理の必須コマンド:宣言、一覧表示、削除
RabbitMQでのキュー管理は、インシデント中に行うまでは簡単に見えます。キューには、名前、仮想ホスト、引数、コンシューマー、バインディング、メッセージ、そして時にはポリシーが重なっています。間違ったキューを削除したり、間違ったプロパティで宣言したりすると、ブローカーの停止と同じくらい迅速にアプリケーションを壊す可能性があります。
以下のコマンドは日常業務に焦点を当てています。インフラストラクチャを準備する必要があるときにキューを宣言し、ブローカーの状態を理解する必要があるときにキューを一覧表示し、意図的に何かを削除したいときにキューを削除またはパージします。例ではrabbitmqctlを使用していますが、管理UIやHTTP APIを使用する場合も同じ注意が必要です。
前提条件とrabbitmqctlツール
この記事で説明するコマンドを実行するには、RabbitMQ管理ツールがインストールされているマシン、またはrabbitmqctlがターゲットクラスターに接続できるマシンへのコマンドラインアクセスが必要です。これらの管理操作を実行するには、通常、権限が必要です。
rabbitmqctlコマンドの一般的な構文は次のとおりです。
rabbitmqctl <command> [arguments]
以下のすべての例は、デフォルトの仮想ホスト(/)を想定しています。キューが別のvhostにある場合は、-p <vhost_name>を追加してください。これは、/prodのordersと/stagingのordersが異なるキューであるため重要です。
1. 新しいキューの宣言(declare_queue)
キュー宣言は、ブローカー上にキューを作成するプロセスです。キューは通常、接続時にクライアントアプリケーションによって宣言されますが、rabbitmqctlを介した管理上の宣言は、セットアップ、テスト、またはクライアント接続が確立される前に非常に特定のキューを定義するのに役立ちます。
declare_queueコマンドを使用すると、永続性、排他性、自動削除などの重要なキュープロパティを定義できます。
基本的なキュー宣言
最も簡単なコマンドは、デフォルト設定でキューを宣言します。現在のRabbitMQ CLI構文では、キュープロパティはキーと値のペアとして渡されます。
rabbitmqctl declare_queue name=my_new_queue durable=false
キュープロパティの定義
主要なパラメータは、キューの永続性とライフサイクルを制御するために使用されます。
| パラメータ | 説明 | デフォルト | 根拠 |
|---|---|---|---|
durable |
trueの場合、キュー定義はブローカーの再起動後も持続します。 |
false |
システム障害を乗り越える必要があるキューにとって重要です。 |
exclusive |
trueの場合、キューは宣言した接続によってのみ消費でき、その接続が閉じられると削除されます。 |
false |
一時的なプライベートリソースに使用されます。 |
auto_delete |
trueの場合、最後のコンシューマーが切断されるとキューが削除されます。 |
false |
短命で一時的なキューに役立ちます。 |
例:永続キューの宣言
永続キュー定義はブローカーの再起動後も存続します。メッセージの存続はメッセージ配信モードとストレージ動作にも依存するため、永続キューをすべてのメッセージが永続的であるという保証として扱わないでください。
rabbitmqctl declare_queue name=production_durable_queue durable=true
例:一時的な自動削除キューの宣言
rabbitmqctl declare_queue name=temp_worker_queue auto_delete=true
ヒント: キューが既に存在する場合、
declare_queueは指定されたプロパティが既存のキューのプロパティと一致する場合にのみ成功します。プロパティが異なる場合、コマンドは失敗し、誤った設定を防ぎます。
その失敗は便利です。アプリケーションが永続的なクォーラムキューを期待していて、オペレーターが誤って同じ名前の一時的なクラシックキューを宣言した場合、RabbitMQは静かにセマンティクスを変更するのではなく、不一致を拒否する必要があります。
2. キューの一覧表示と検査(list_queues)
キューのステータスを監視することは、頻繁な管理タスクです。list_queuesコマンドは非常に柔軟で、必要なメトリクスを正確に指定でき、情報過多を防ぎます。
基本的な一覧表示
デフォルトでは、list_queuesはキュー名、メッセージ総数、コンシューマー数などの一般的な列を表示します。運用作業では、必要な正確な列を要求する方が良いです。
rabbitmqctl list_queues
出力例:
Timeout: 60.0 seconds...
Listing queues for vhost /
name messages consumers
my_new_queue 0 1
production_durable_queue 150 2
特定のキュープロパティの一覧表示
より深い運用上の洞察を得るために、スペース区切りの列名リストを指定できます。これは、メッセージ数の多さやメモリ使用量のトラブルシューティングに重要です。
監視に不可欠な列:
| 列名 | 説明 |
|---|---|
messages_ready |
配信可能なメッセージ(消費される準備ができている)。 |
messages_unacknowledged |
配信されたが、コンシューマーによってまだ確認応答されていないメッセージ。 |
consumers |
キューに接続されているアクティブなコンシューマーの数。 |
memory |
ノード上のキューによる推定メモリ使用量(バイト単位)。 |
policy |
キューに適用されたポリシーの名前。 |
state |
キューの運用状態(例:running、flow、idle)。 |
type |
キュー型。RabbitMQのバージョンによっては、classicやquorumなど。 |
例:詳細なキュー検査
現在のバックログ、コンシューマーの健全性、ポリシーの適用を確認するには、次を使用します。
rabbitmqctl list_queues name messages_ready messages_unacknowledged consumers memory policy
数字を一緒に読み取ります。messages_readyが高く、コンシューマーがゼロのキューは、通常、コンシューマーが接続されていないことを意味します。準備完了メッセージが少ないがmessages_unacknowledgedが高いキューは、メッセージを受信したが確認応答していないコンシューマーを示しています。それは、遅い作業、クラッシュしたワーカー、過大なプリフェッチカウント、またはack/nackを決して呼び出さないバグである可能性があります。
特定の仮想ホスト上のキューの一覧表示
デフォルトの仮想ホスト以外のキューを確認する必要がある場合は、-pフラグを使用します。
rabbitmqctl list_queues -p /api_vhost name messages consumers
3. キューの削除とパージ(delete_queueおよびpurge_queue)
キューが非推奨になったり、リセットする必要がある場合、主に2つのオプションがあります。キュー構造全体を削除するか、構造を維持したまま内容をパージすることです。
キューの削除(delete_queue)
delete_queueコマンドは、キューとその中に現在保存されているすべてのメッセージを完全に削除します。この操作は元に戻せません。
rabbitmqctl delete_queue my_old_queue
警告:データ損失のリスク 実行前に、キューが空であるか、その内容が不要であることを常に確認してください。保留中のメッセージがあるキューを削除すると、それらのメッセージが即座に完全に失われます。
キュー内容のパージ(purge_queue)
キュー構造(バインディング、永続性、ポリシー)を維持する必要があるが、すべてのメッセージをクリアする必要がある場合(例:誤ったジョブのバックログをクリアするため)、purge_queueを使用します。
rabbitmqctl purge_queue my_stuck_queue
このコマンドは、キュー定義を削除せずに、キューから準備完了メッセージを削除します。既にコンシューマーに配信され、確認応答を待っているメッセージは、パージによって単純に消去されるわけではありません。それらのコンシューマーが切断したり、再キューイングを有効にしてメッセージを拒否したりすると、一部のメッセージが再表示される可能性があります。深刻なクリーンアップ中は、最初にコンシューマーを停止またはドレインして、何をパージしているかを把握してください。
異なるVHostでのキューの処理
正しいキューを削除またはパージするために、キューがデフォルトのコンテキストにない場合は、常に仮想ホストを指定してください。
# 特定の仮想ホスト内のキューを削除
rabbitmqctl delete_queue -p /testing_vhost temp_test_queue
削除する前に、通常は次のコマンドを実行します。
rabbitmqctl list_queues -p /testing_vhost name messages_ready messages_unacknowledged consumers
その1つのチェックで多くの間違いをキャッチできます。間違ったvhost、予期しないコンシューマー、またはまだ処理中の作業があるキューなどです。
必須コマンドのまとめ
この表は、日常のRabbitMQ運用で使用されるコアキュー管理コマンドをまとめたものです。
| アクション | コマンド | 目的 |
|---|---|---|
| 宣言 | rabbitmqctl declare_queue name=Q durable=true |
定義されたプロパティで新しいキューを作成します。 |
| 検査 | rabbitmqctl list_queues name messages consumers |
キューと特定の運用メトリクスを一覧表示します。 |
| 削除 | rabbitmqctl delete_queue Q |
キューとその準備完了メッセージを完全に削除します。 |
| クリーンアップ | rabbitmqctl purge_queue Q |
構造を維持しながら、キューから準備完了メッセージをクリアします。 |
安全な習慣は簡単です。疑わしい場合は常にvhostを含め、破壊的なコマンドの前に検査し、キュー宣言はアプリケーション契約の一部であることを覚えておいてください。キュー型、永続性、自動削除動作、および引数は、単なるランタイムの詳細ではなく、スキーマとして扱う必要があります。