Le fichier de définitions permet de déclarer les principaux éléments d’un serveur RabbitMQ.
Il peut être pris en compte au démarrage ou importé a posteriori.
Virtual hosts
"vhosts": [
{
"limits": [],
"metadata": {
"description": "Virtual host for jtips examples",
"tags": []
},
"name": "/jtips"
}
]
Queues et exchanges
Queues
Les types de queues peuvent être classic
, en mono-noeud ou quorum
en distribué, ainsi que stream
.
"queues": [
{
"name": "q.activity.AB",
"type": "classic",
"durable": true,
"vhost": "/jtips"
},
{
"name": "q.segment",
"type": "stream",
"arguments": {
"x-queue-type": "stream"
},
"durable": true,
"vhost": "/jtips"
}
]
Référence:
Exchanges
Les types d'exchanges peuvent être direct
, topic
ou fanout
.
"exchanges": [
{
"name": "x.segment",
"type": "topic",
"auto_delete": false,
"durable": true,
"vhost": "/jtips"
},
{
"name": "x.activity.ride",
"type": "topic",
"auto_delete": false,
"durable": true,
"vhost": "/jtips"
}
]
Bindings
"bindings": [
{
"source": "x.segment",
"destination": "q.segment",
"destination_type": "queue",
"routing_key": "#",
"vhost": "/jtips"
},
{
"source": "x.activity",
"destination": "q.activity.ride",
"destination_type": "queue",
"routing_key": "ride",
"vhost": "/jtips"
}
]
Users et permissions
Utilisateurs
Pour chaque utilisateur, le mot de passe est digéré.
Ça peut être fait avec rabbitmqctl
et sa commande hash_password
.
$ rabbitmqctl hash_password adminpwd
Will hash password adminpwd
NYvHheVKOpEzhHTrugfvr1PpmA0Hb6SAMXHWRnFD9uO5xdsW
"users": [
{
"name": "admin",
"password_hash": "NYvHheVKOpEzhHTrugfvr1PpmA0Hb6SAMXHWRnFD9uO5xdsW",
"tags": [
"administrator"
]
},
{
"name": "varko",
"password_hash": "VUKoAxZoyVAhC2vJZZPpa+U1dUTGoCW1L52WHq8tJINtduzs",
"tags": []
}
]
Permissions
Pour chaque utilisateur, on peut définir les queues et exchanges auquels il a accès, en lecture / écriture et pour configuration. Ça se fait par des expressions régulières.
Dans l’exemple ci-dessous, l’utilisateur admin a tous les accès, du moins pour le virtual host /
,
alors que l’utilisateur gateway a un accès limité.
"permissions": [
{
"user": "admin",
"vhost": "/jtips",
"read": ".",
"write": ".",
"configure": "."
},
{
"user": "varko",
"vhost": "/jtips",
"read": "(q\.segment|x\.activity\..)",
"write": "(q\.segment|q\.activity\..|x\.client\..|x\.activity\..)",
"configure": "(q\.segment|q\.client\..|x\.client\..|x\.user\..)"
}
],
"topic_permissions": [
{
"user": "varko",
"vhost": "/jtips",
"exchange": "x\.activity\.ABC",
"read": ".",
"write": "."
}
]
Les topic permissions servent uniquement pour les exchanges de type topic. Elles doivent être vues comme une surcouche aux permissions classique et non un remplacement.
Dans cette partie, le nom de l'exchange est complet, sans caractère joker ou regex. Les parties read et write acceptent les expressions régulières. Il n’y a pas de configure.
Import / Export
Au démarrage
# /etc/rabbitmq/conf.d/20-definitions.conf ou /etc/rabbitmq/rabbitmq.conf
load_definitions = /etc/rabbitmq/definitions.json
Sans le plugin de management
rabbitmqctl export_definitions /etc/rabbitmq/definitions-export.json
# ou
rabbitmqctl export_definitions -
rabbitmqctl import_definitions /etc/rabbitmq/definitions.json
Avec le plugin de management
rabbitmqadmin export
# ou
curl --user admin:adminpwd --request GET http://localhost:15672/api/definitions
rabbitmqadmin import /etc/rabbitmq/definitions.json
# ou
curl --user admin:adminpwd \
--header "Content-Type: application/json" \
--upload-file /etc/rabbitmq/definitions.json \
--request POST http://localhost:15672/api/definitions
Références