RabbitMQ : un envoi rapide des messages
Dans le domaine informatique, des messages doivent constamment être envoyés d’un service à un autre. Cet envoi doit être effectué de façon contrôlée, faute de quoi les messages se bloquent mutuellement et provoquent une congestion empêchant ainsi que les processus ne se déroulent de façon optimale. Afin de permettre aux applications de communiquer entre elles sans problème, il est pertinent de faire appel à un médiateur, c’est-à-dire un service qui assurera la distribution des messages. De tels médiateurs sont appelés message brokers (agents de messages). Nous vous présentons l’un d’entre eux dans cet article : RabbitMQ.
- Domaine .eu ou .fr + éditeur de site gratuit pendant 6 mois
- 1 certificat SSL Wildcard par contrat
- Boîte email de 2 Go
Qu’est-ce que RabbitMQ ?
RabbitMQ est basé sur l’idée du Advanced Message Queuing Protocol (AMQP). Le principal avantage du AMQP est qu’il n’impose pas à l’émetteur et au destinataire de comprendre le même langage de programmation. Le message broker s’est aujourd’hui quelque peu détaché du AMQP et fonctionne également avec des protocoles de messages comme STOMP ou MQTT grâce à des plugins, mais l’idée reste la même : le producteur et le destinataire du message sont séparés par une file d’attente dans laquelle les messages sont stockés temporairement.
Le terme « message » est très souvent utilisé dans ce contexte. Les messages peuvent être des instructions à d’autres programmes ou des messages textuels à proprement parler. Toute forme de transfert d’informations peut avoir lieu via RabbitMQ ou d’autres message brokers.
L’avantage de RabbitMQ réside dans le fait que le producteur du message n’a pas à effectuer personnellement l’envoi. Le message broker reçoit le message et donne ainsi la possibilité au producteur de commencer une nouvelle tâche. L’émetteur n’est pas obligé d’attendre que le destinataire reçoive le message. Dans le cadre de cette procédure, le message est placé dans la file d’attente avant d’être récupéré par le consommateur. À cet instant, l’émetteur est déjà occupé à une nouvelle tâche. Il s’agit donc d’une procédure asynchrone : l’émetteur et le destinataire n’ont pas à agir au même rythme.
Déroulement avec RabbitMQ
Il existe quatre étapes dans la transmission des messages :
- Producer : génère le message
- Exchange : transmet le message
- Queue : stocke le message
- Consumer : traite le message
Le « Producer » publie un message, mais au lieu de le transmettre directement au « Consumer », il l’envoie à l’« Exchange ». Cette étape est responsable de la distribution des messages aux différentes files d’attente, qui les transmettent ensuite au Consumer. Les étapes « Exchange » et « Queue » font partie de RabbitMQ et sont gérées par le logiciel. Pour que les messages parviennent aux bons destinataires, on utilise des « Routing Keys ». L’émetteur alloue au message une Routing Key qui fonctionne comme une adresse. À l’aide de cette clé, l’Exchange identifie la façon dont le message doit être adressé.
Un « Binding » a lieu entre l’Exchange et la file d’attente. Celui-ci assure la connexion entre chaque file d’attente individuelle et l’Exchange. Le Binding définit par ailleurs selon quels critères un message doit être transmis. Les messages peuvent être distribués selon quatre types de base.
Direct Exchange
Un Direct Exchange est une connexion directe entre l’émetteur et le destinataire. Le Producer alloue au message une Routing Key qui correspond à la Binding Key de la Queue. Par conséquent, une seule Queue est possible et un seul Consumer est généralement rattaché à cette dernière.
Topic Exchange
Ce type d’Exchange élargit le concept de Direct Exchange. Plutôt que d’avoir recours à un seul critère (Routing Key = Binding Key), plusieurs Queues peuvent être atteintes. Il fonctionne à l’aide de balises et permet d’accepter certaines Queues ou Binding Keys tout en maintenant l’exclusion des autres Queues.
Fanout Exchange
Le Fanout Exchange est une diffusion permettant de distribuer un message à toutes les Queues disponibles. Aucun tri n’est effectué. Les Routing Keys sont ignorées.
Header Exchange
Le système ignore également les Routing Keys en cas de Header Exchanges. Pour ce type d’Exchange, c’est l’en-tête du message qui joue un rôle essentiel. L’Exchange y trouvera les attributs qui lui permettront d’accéder aux bonnes Queues. En ce sens, l’Header Exchange fonctionne de façon similaire au Topic Exchange, puisqu’il existe également plusieurs Queues, mais elles ne peuvent pas être toutes adressées.
Les Consumers, autrement dit les logiciels destinataires, s’inscrivent à certaines Queues qui leur transmettent les messages. Par conséquent, un seul Consumer est également prévu par Queue. Si plusieurs Consumers retirent des messages d’une file d’attente, il est impossible de garantir une distribution correcte. Il est également possible, mais pas impératif, d’imposer ou pas au destinataire l’envoi d’un accusé de réception pour chaque message.
RabbitMQ en pratique
RabbitMQ est un serveur open source codé en langage de programmation Erlang et peut être téléchargé pour Linux, BSD, Unix, Windows et macOS depuis le site Internet officiel. Il est par ailleurs recommandé d’installer des plug-ins facilitant le travail avec ce message broker et complétant l’éventail de fonctionnalités. En premier lieu, il est recommandé d’activer le plugin de gestion, qui est fourni à l’installation, mais n’est pas activé par défaut. Avec ce plugin, les utilisateurs peuvent gérer RabbitMQ à l’aide d’une IGU, disposer d’une vue d’ensemble des messages dans les files d’attente et consulter des statistiques.
Le plugin Shovel peut aussi avoir son importance : il permet de connecter ensemble deux instances de broker. Cela peut notamment s’avérer utile pour mieux répartir la charge. Par ailleurs, vous pouvez déplacer des données sensibles ou de très grandes quantités de données dans un tout autre réseau, notamment pour des raisons de sécurité.
RabbitMQ nécessite des ports car la communication fonctionne via TCP. Ces ports ne doivent pas être fermés ou bloqués par d’autres applications. Une liste de tous les ports utilisés est disponible dans la documentation de RabbitMQ.
RabbitMQ séduit principalement par sa construction simple. Le message broker peut être mis en place rapidement et se montre utile dans de nombreuses situations. Toutefois, dans les scénarios de plus grande envergure, les développeurs et les administrateurs préfèrent utiliser Apache Kafka.