Management API de RabbitMQ

L’API HTTP de management permet d’une part de créer, modifier des entités (exchanges, queues) de RabbitMQ, mais aussi de lire ou publier des messages.

Cette page traite très partiellement le sujet. Il y aura peut-être plus de contenu plus tard…​

Installation

Pour activer l’API de management, il faut le même plugin que pour la console.

rabbitmq-plugins enable rabbitmq_management

En local, la racine de l’API est http://localhost:15672/api.

Il faut aussi un utilisateur avec un tag management ou administrator.

{
  "name": "test",
  "password_hash": "...",
  "tags": ["management"]
}

L’utilisateur doit avoir les permissions sur les entités, configure pour les créer ou modifier, read/write pour échanger des messages.

{
  "user": "test",
  "vhost": "/",
  "read": ".",
  "write": "."
}

La méthode d’authentification est BASIC.

Manipulation d’entités

TODO

Envoi de message

L’envoi d’un message se fait par un POST sur le endpoint /api/exchanges/<vhost>/<echange>/publish/.

Par exemple, pour envoyer un message sur l’exchange par défaut (nom vide) du virtual host /, en local:

curl http://localhost:15672/api/exchanges/%2f//publish   \
     --user test:test-pwd --request POST                 \
     --data '...'

Le contenu du POST est en JSON. Il a quatre propriétés:

  • properties, dont les en-têtes

  • routing_key

  • payload

  • payload_encoding qui peut être string pou base64

Avec un payload texte, si c’est du JSON, ça fait du JinJ (JSON in JSON) avec des échappements de doubles-quotes.

payload='{"id": "3172fc96-4786-4146-ad80-4c993f64db30", "description": "Hello World"}'

curl http://localhost:15672/api/exchanges/%2f//publish   \
     --user test:test-pwd --request POST                 \
     --data @- <<EOF
{
  "properties":{
    "headers": {
      "event-type": "hello"
    }
  },
  "routing_key":"q.jtips",
  "payload":"${payload//\"/\\\"}",
  "payload_encoding":"string"
}
EOF

Sinon, on peut opter pour un payload base64.

payload='{"id": "3172fc96-4786-4146-ad80-4c993f64db30", "description": "Hello World"}'
payload64=$(echo $payload | base64)

curl http://localhost:15672/api/exchanges/%2f//publish   \
     --user test:test-pwd --request POST                 \
     --data @- <<EOF
{
  "properties":{
    "headers": {
      "event-type": "hello"
    }
  },
  "routing_key":"q.ah.test",
  "payload":"$payload64",
  "payload_encoding":"base64"
}
EOF