こんにちは。サイオステクノロジー技術部 武井です。今回は、RabbitMQのRestAPIを試してみます。
Rest APIの仕様
RabbitMQはRest APIもサポートしています。なので、HTTPクライアントさえあれば、言語やプラットフォーム問わず、利用が可能です。以下URLに仕様があります。
https://cdn.rawgit.com/rabbitmq/rabbitmq-management/rabbitmq_v3_3_5/priv/www/api/index.html
これを見る限りですと、キューの配信や取得などそこそこのことはできそうな感じですね。
※ 現時点(2018年2月28日)でyumでインストールできるバージョン(3.3.5)を元にしております。最新版は若干APIの仕様が違うようです。
試してみる
早速試してみたいと思います。特定のキューのメッセージを取得するAPIを試してみます。上記のドキュメントを見てみると仕様は以下のようです。
Method
POST (GETぢゃないよって注意書きがあります)
URI
/api/queues/vhost/name/get
※vhostはVirtual Host名、nameは取得対象のキューの名前です
Body
{“count”:5,”requeue”:true,”encoding”:”auto”,”truncate”:50000}
count:一度に取得するメッセージの最大件数です
requeue:trueだと、キューからメッセージを取得後に削除せず、falseだと削除します。
encoding:autoだとメッセージがUTF-8だと文字列で、base64だとbase64にエンコードされるそうです。
truncate:ここで指定したバイト以下にメッセージの内容が切り詰められます。必須項目ではないです。
認証
Basic認証です。RabbitMQに登録しているユーザーでBasic認証します。
ということでcurlコマンドで試してみます。
$ curl -u guest:guest -H 'Content-Type:application/json'd "{\"count\":5,\"requeue\":false,\"encoding\":\"auto\"}" https://localhost:15672/api/queues/%2f/rabbitmq_sample/get [ { "exchange": "", "message_count": 0, "payload": "hoge", "payload_bytes": 4, "payload_encoding": "string", "properties": { "delivery_mode": 1, "headers": {} }, "redelivered": false, "routing_key": "rabbitmq_sample" } ]
おお(`・ω・´)シャキーン
取得できました。ちなみにpayloadという項目がメッセージの内容になります。