Geekflare est soutenu par son public. Nous pouvons percevoir des commissions d'affiliation sur les liens d'achat présents sur ce site.
En Développement et Mise en réseau Dernière mise à jour : 16 septembre 2023
Partager sur :
Invicti Web Application Security Scanner - la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Nous allons voir aujourd'hui comment accélérer le temps de chargement de vos pages en exécutant les traitements les plus lourds de manière asynchrone, le tout géré très simplement, grâce à RabbitMQ.

La stabilité et la rapidité d'une application ou d'un site web sont certainement parmi les facteurs les plus importants pour les utilisateurs. Qui n'a jamais quitté un site avant même d'avoir vu la première page parce que cela prenait trop de temps ?

Qu'est-ce que RabbitMQ ?

LapinMQ-1

LapinMQ est un logiciel libre, distribué et évolutif. courtier en messagerie qui sert d'intermédiaire pour une communication efficace entre les producteurs et les consommateurs.

LapinMQ met en œuvre le protocole de messagerie de la couche application AMQP, qui est axé sur la communication de messages asynchrones avec une garantie de livraison grâce à des confirmations de réception des messages du courtier au producteur et des consommateurs au producteur.

Comment fonctionne le RabbitHQ ?

De manière simplifiée, RabbitMQ définit des files d'attente qui stockent les messages envoyés par les producteurs jusqu'à ce que les applications consommatrices reçoivent le message et le traitent. Il nous permet de concevoir et de mettre en œuvre des systèmes distribués, dans lesquels un système est divisé en modules indépendants qui communiquent entre eux par le biais de messages. 

Comme pour toute communication, nous avons besoin d'un producteur, d'un message et d'un récepteur. Au milieu du gâteau se trouve RabbitMQ, qui est l'endroit où le message attend le récepteur.

Pour mieux comprendre son fonctionnement, connaissons les types d'échanges représentant l'échange de messages.

Types d'échanges

Grâce aux échanges, chaque fois que nous envoyons un message via RabbitMQ, nous ne l'envoyons pas directement à une file d'attente ; pour que d'autres systèmes puissent le lire, nous l'envoyons à un échange, qui est responsable de l'acheminement des messages vers différentes files d'attente.

échanges-sujet-fanout-direct
Crédit d'image : CloudAQMP

Les types d'échanges sont Direct, Fanout, Topic et Readers.

Échange direct

Supposons qu'un producteur doive envoyer un message de confirmation d'achat à trois consommateurs. En d'autres termes, le système doit communiquer avec trois autres systèmes différents pour effectuer l'achat.

Comme RabbitMQ envoie le message séparément à chaque file d'attente, il est possible de faire en sorte que ces autres systèmes reçoivent le message directement.

Normalement, l'échange transmet le message aux files d'attente, mais nous ne voulons souvent pas que nos messages soient envoyés à toutes les files d'attente. C'est pourquoi il existe plusieurs conditions que nous pouvons appliquer pour faire fonctionner un échange.

Vous pouvez donc envoyer votre message à un seul consommateur, au lieu de l'envoyer à tout le monde.

Clé de liaison: Pour connecter une file d'attente à un échange, il faut créer un bind, une relation entre une file d'attente et un échange, comme un connecteur.

Clé de routage: Dans cette liaison, nous pouvons également créer un élément appelé clé de routage, qui, en d'autres termes, est une clé permettant d'acheminer nos messages vers une file d'attente spécifique.

Si vous disposez d'une clé de routage X, d'une clé de routage Y et d'une clé de routage Z, le message avec la clé de routage Y, par exemple, passera par la file d'attente Y et sera livré directement au consommateur que vous avez défini pour recevoir le message.

De cette façon, nous pouvons avoir plusieurs files d'attente connectées à un échange, mais en même temps, elles peuvent également avoir des relations différentes avec les échanges en utilisant les clés de routage.

Échange de Fanout

Lorsque le message est envoyé à l'échange, il est envoyé à toutes les files d'attente qui y sont connectées. Ainsi, si vous avez 10 files d'attente connectées à un échange fanout, toutes les files d'attente recevront le message qui a été envoyé.

Échange de thèmes

Il s'agit de l'un des échanges les plus flexibles, qui nous permet d'envoyer des messages en fonction du sujet. Et en fonction de la manière dont vous nommez les clés de routage, il est possible de créer des modèles de règles et de relations entre les systèmes.

Par exemple : routing key (x.*); routing key(*.z); routing key (*.y.*).

Qu'est-ce que l'AQMP dans RabbitMQ ?

AMQP (Advanced Message Queuing Protocol) est un protocole de messagerie ouvert utilisé pour définir le transport de messages entre plusieurs applications. Il est similaire aux protocoles HTTP et TCP en ce sens qu'il s'agit d'un protocole de niveau filaire, sauf qu'il permet le transport asynchrone.

RabbitMQ a choisi d'implémenter AMQP pour plusieurs raisons. La première est que ce protocole est décrit comme une norme pour les intergiciels, contrairement à JMS, qui définit une API.

Un consortium international, comprenant de grandes entreprises telles que Red Hat, Cisco Systems et Microsoft, a rédigé ce document AMQP Spécifications. La seconde est l'interopérabilité de ce protocole, qui permet à toute application mettant en œuvre AMQP de communiquer avec un courtier AMQP.

AMQP n'est pas le seul protocole utilisé par RabbitMQ. L'image ci-dessous représente tous les protocoles, langages et API mis en œuvre et/ou pris en charge par RabbitMQ.

Les meilleures caractéristiques de RabbitMQ

En plus de permettre l'intégration de différentes applications par le biais de messages asynchrones et provenant de différents endroits, RabbitMQ offre d'autres caractéristiques qui l'ont rendu très populaire dans le monde des courtiers de messagerie :

Stockage fiable

RabbitMQ intègre plusieurs fonctionnalités qui lui permettent de garantir la livraison des messages. Il fournit notamment un stockage lorsqu'aucun consommateur ne peut recevoir le message. Il permet aux consommateurs d'accepter la livraison du message pour s'assurer qu'il a été traité avec succès.  

Si le traitement échoue, RabbitMQ permet au message d'être remis en file d'attente pour être consommé par une autre instance du consommateur ou d'être traité à nouveau par le même consommateur que celui qui a initialement échoué lorsqu'il se rétablit.

RabbitMQ garantit également l'ordre de livraison des messages, c'est-à-dire qu'ils sont consommés dans l'ordre dans lequel ils sont arrivés dans les files d'attente RabbitMQ.

Création de clusters

Bien que RabbitMQ offre d'excellentes performances en traitant des milliers de messages par seconde, il doit parfois être en mesure de traiter un plus grand nombre de messages sans nuire aux performances de l'application.

Pour ce faire, RabbitMQ permet de créer des grappes afin de faire évoluer la solution horizontalement, ce qui est transparent pour les producteurs et les consommateurs.

Files d'attente à haute disponibilité

Dans RabbitMQ, les files d'attente peuvent être répliquées sur plusieurs nœuds d'une grappe, ce qui garantit qu'en cas de défaillance d'un nœud ou de temps d'arrêt, le courtier peut continuer à recevoir les messages des producteurs et les transmettre aux consommateurs appropriés.

Routage flexible

Dans RabbitMQ, des règles de routage flexibles peuvent être définies, même en suivant un certain modèle, pour acheminer les messages entre les échanges et les files d'attente, par le biais de liaisons.

Prise en charge de plusieurs protocoles

Outre le protocole AMQP, RabbitMQ prend en charge STOMP, MQTT et HTTP par le biais de modules d'extension. Il intègre également l'authentification et des mécanismes de contrôle d'accès pour les composants de chaque courtier.

Cas d'utilisation réels de RabbitMQ

Les principaux cas d'utilisation de RabbitMQ sont la garantie de l'asynchronisme entre les applications, la réduction du couplage entre les applications, la distribution d'alertes et le contrôle de la file d'attente des travaux en arrière-plan. 

Cependant, les cas pratiques d'utilisation de RabbitMQ se situent dans les domaines suivants Commerce électroniqueoù il est utilisé pour manipuler, traiter et transmettre vos commandes de vente à des systèmes d'autres secteurs, tels que la distribution et l'émission de factures.

Lors du traitement des commandes, vous pouvez transmettre votre message de vente à la plate-forme et à une zone de facturation. Dans ce schéma, tout fonctionne horizontalement, en suivant le modèle asynchrone pour l'envoi de messages, mais il est souvent possible d'envoyer une action à plusieurs files d'attente.

Dans le prolongement de l'exemple précédent, cette fonction peut être très utile lorsque le client effectue un achat et que le produit doit être préparé pour la distribution, le transport et les factures.

Et comme chacun de ces secteurs est un système différent, l'objectif de RabbitMQ est de transmettre tous ces messages aux systèmes correspondants.

Alternatives à Rabbit MQ :

RabbitMQ est beaucoup plus simple qu'il n'y paraît, et il existe plusieurs alternatives, notamment :

#1. IronMQ

IronMQ est un logiciel de mise en file d'attente de messages ultra-rapide. Il est hautement disponible, de conception durable, et de préférence pour une livraison unique. IronMQ est la solution cloud-native la plus puissante pour l'architecture des applications modernes.

ironmq-1

Il prend en charge les files d'attente "push", les files d'attente "pull" et les "long polls", qui permettent de maintenir les demandes de sondage ouvertes plus longtemps. En outre, il peut utiliser plusieurs centres de données à haute disponibilité, ce qui facilite l'évolutivité.

Vous pouvez le déployer dans le nuage, sur du matériel partagé ou dédié, ou sur site. Il dispose également d'une gamme de bibliothèques client avec une documentation facile à lire.

#2. Apache Kafka 

Kafka est une plateforme très présente dans le domaine de la diffusion en continu d'événements distribués. À la base, Kafka est conçu comme un journal d'engagement répliqué, distribué et persistant.

kafka-1

Sa plus grande utilité est d'alimenter des microservices pilotés par les événements ou des applications de traitement de flux à grande échelle, en répliquant automatiquement les événements de manière asynchrone au sein du cluster afin d'assurer la tolérance aux pannes et la haute disponibilité.

#3. Apache ActiveMQ

Apache-ActiveMQ

ActiveMQ est un courtier en messages multiprotocoles basé sur Java. Il permet d'intégrer des applications utilisant le protocole de mise en file d'attente de messages AMQP au niveau de la couche applicative.

Il met en œuvre plusieurs protocoles d'intégration, tels que JMS (natif de Java) et Stomp (qui peut être utilisé par des applications PHP), entre autres.

En outre, Amazon dispose d'une version "gérée" appelée Amazon MQce qui facilite grandement l'utilisation du service.

Dernières paroles

Les courtiers en messagerie ont toujours été un élément important de l'architecture des entreprises. Cependant, avec l'augmentation du nombre d'utilisateurs entrant dans les systèmes de l'entreprise par différents canaux, il est nécessaire d'avoir des produits qui leur permettent d'être mis à l'échelle horizontalement à faible coût. Permettre le traitement d'un grand nombre de messages par seconde.

C'est là qu'une nouvelle génération de courtiers, tels que RabbitMQ, devient plus pertinente dans les applications modernes, qui cherchent à offrir des niveaux élevés de disponibilité, de fiabilité, d'interopérabilité et de performance à nos clients.

Vous pouvez également explorer des Plateformes d'hébergement RabbitMQ pour votre application.

  • Talha Khalid
    Auteur
Merci à nos sponsors
D'autres lectures intéressantes sur le développement
Alimentez votre entreprise
Quelques outils et services pour aider votre entreprise à se développer.
  • Invicti utilise le Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, search engine crawler, et tout ce dont vous avez besoin pour collecter des données web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation tout-en-un qui vous aide à gérer vos projets, vos tâches, votre travail, vos ventes, votre CRM, vos opérations, vos flux de travail et bien plus encore.
    Essayez le lundi
  • Intruder est un scanner de vulnérabilité en ligne qui détecte les faiblesses de votre infrastructure en matière de cybersécurité, afin d'éviter des violations de données coûteuses.
    Essayer l'intrus