Fondamentaux MQTT

Broker MQTT vs file de messages : quelle différence ?

Un broker MQTT et une file de messages se placent tous deux entre producteurs et consommateurs, mais ils livrent les messages de façons fondamentalement différentes. Découvrez la sémantique de chacun et quand un broker MQTT cloud est la bonne brique.

Schéma opposant un message diffusé à de nombreux abonnés via un broker et des messages attendant des workers dans une file, illustrant broker MQTT vs file de messages
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

La distinction broker MQTT vs file de messages déroute de nombreuses équipes, car les deux sont des « message brokers » placés entre producteurs et consommateurs. La différence tient à la sémantique de livraison : un broker MQTT copie chaque message vers chaque abonné intéressé, immédiatement, alors qu'une file de messages conserve chaque message jusqu'à ce qu'un seul consommateur en prenne la responsabilité. Ce guide explique les deux modèles, les compare aux files de type RabbitMQ et SQS, et montre quand un broker MQTT cloud est la bonne brique.

Deux modèles de livraison

Publish/subscribe par topic (MQTT). Un éditeur envoie un message sur un topic comme plant1/line2/press4/temperature. Le broker examine tous les abonnements en cours, trouve ceux dont les filtres correspondent et livre une copie à chacun. Si cinq services sont abonnés, cinq copies partent. Si personne n'est abonné, le message est abandonné, sauf s'il est retained comme dernière valeur du topic ou mis en file dans une session persistante. Le rôle du broker est le routage, pas le stockage. Pour approfondir ce modèle, consultez le modèle publish/subscribe de MQTT.

Files point à point (RabbitMQ, SQS et similaires). Un producteur envoie un message dans une file. Le message y attend, de façon durable, jusqu'à ce qu'un consommateur le reçoive. Avec plusieurs consommateurs sur la même file, chaque message ne va qu'à l'un d'eux ; ils se disputent le travail. Le consommateur accuse réception après traitement, et s'il plante avant, le message redevient visible pour un autre consommateur. Le rôle de la file est de garantir que chaque unité de travail est effectuée une fois par quelqu'un.

En résumé : MQTT répond à « qui a besoin d'être informé ? », et une file répond à « qui va effectuer ce travail ? ».

Broker MQTT vs file de messages : comparaison

Aspect Broker MQTT File de messages (type RabbitMQ, SQS)
Livraison Copie à chaque abonné correspondant Chaque message à un seul consommateur
Adressage Topics hiérarchiques, jokers + et # Files nommées (plus exchanges et bindings dans RabbitMQ)
Message créé sans consommateur Abandonné, sauf s'il est retained ou conservé pour une session persistante Stocké jusqu'à consommation ou expiration
Stockage Dernière valeur retained par topic, files de session par client Files durables, souvent avec une longue rétention
Accusé de réception QoS 1 et 2 entre client et broker Ack du consommateur après traitement, relivraison en cas d'échec
Répartition du travail Abonnements partagés dans MQTT 5 Consommateurs concurrents natifs
Gestion des lettres mortes Ne fait pas partie de MQTT Fonctionnalité courante (dead-letter queues et exchanges)
Ordre Par topic et par session client Par file, avec des réserves en cas de relivraison
Mode de livraison Push vers les clients connectés Push (RabbitMQ) ou pull/long polling (SQS)
Empreinte client Minuscule, tourne sur microcontrôleurs SDK de classe serveur
Présence et état Keep alive, Last Will, retained messages Sans objet
Usage typique Télémétrie d'appareils, commandes, état en direct, tableaux de bord Tâches de fond, traitement des commandes, microservices découplés

Là où les modèles se recoupent

La frontière n'est pas parfaitement nette, ce qui explique en partie la confusion.

MQTT possède deux fonctionnalités proches d'une file. Une session persistante fait que le broker met en file les messages QoS 1 et 2 pour un client pendant qu'il est hors ligne ; avec MQTT 5, on la borne par un session expiry interval. Les abonnements partagés ($share/group/filter) permettent à plusieurs clients d'un groupe de se partager les messages d'un topic, chaque message n'atteignant qu'un membre du groupe, ce qui correspond exactement au comportement de consommateurs concurrents. Lisez les abonnements partagés MQTT et la session persistante MQTT pour les détails.

Les systèmes de files, à l'inverse, proposent du pub/sub. Les exchanges fanout et topic de RabbitMQ copient un message dans plusieurs files, et les services cloud associent un topic de notification à plusieurs files pour la diffusion. Mais chaque abonné a toujours besoin de sa propre file déclarée à l'avance.

La vraie question n'est donc pas de savoir quelles fonctionnalités existent, mais quel modèle est natif. MQTT est nativement un modèle de diffusion avec des abonnements légers et dynamiques ; les files sont nativement un modèle de répartition durable du travail.

Voir la différence en deux minutes

Vous pouvez observer la diffusion sur le serveur MQTT public gratuit avec les clients mosquitto. Il est réservé aux tests et aux prototypes, jamais aux données de production ; utilisez un préfixe unique pour ne pas voir les messages des autres.

PREFIX="connectmq/demo/$(openssl rand -hex 4)"

# Diffusion : lancez ceci dans deux terminaux, chacun avec un client ID différent
mosquitto_sub -h broker.connectmq.com -V mqttv5 -i fan-$RANDOM \
  -t "$PREFIX/orders/new" -v

# Publiez cinq messages, assez lentement pour respecter la limite de débit par client
for i in 1 2 3 4 5; do
  mosquitto_pub -h broker.connectmq.com -V mqttv5 -i pub-$RANDOM -q 1 \
    -t "$PREFIX/orders/new" -m "order $i"
  sleep 0.5
done

Les deux abonnés affichent les cinq commandes. Pour obtenir un comportement de type file, il vous faut un plan de broker avec abonnements partagés, comme un broker Serverless payant sur ConnectMQ. Démarrez deux workers avec vos propres identifiants (chaque worker a besoin de son propre client ID et des identifiants correspondants, issus du portail) et publiez à nouveau :

mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs -V mqttv5 \
  -u YOUR_USERNAME -P YOUR_PASSWORD -i YOUR_CLIENT_ID \
  -t '$share/workers/orders/new' -v

Les deux workers en abonnement partagé se répartissent les messages, chacun n'en affichant qu'une partie. Arrêtez ensuite les deux workers, publiez à nouveau puis relancez-les : les commandes publiées pendant leur absence sont perdues. Seule une session persistante les aurait conservées, et encore, uniquement pour ce client et dans la limite du session expiry interval. C'est précisément ce manque que comble une vraie file.

Quand utiliser un broker MQTT

Un broker MQTT est la bonne brique lorsque :

  • Les producteurs sont des appareils. Capteurs, passerelles PLC, véhicules, applications mobiles et navigateurs ont besoin de clients légers et d'une gestion tolérante des connexions.
  • De nombreux consommateurs ont besoin des mêmes données. Une mesure part simultanément vers un tableau de bord, un service d'écriture dans un historian et un service d'alerte, et l'ajout d'un quatrième consommateur ne nécessite aucune modification côté producteur.
  • L'état actuel compte plus que l'historique. Les retained messages fournissent instantanément la dernière valeur connue à chaque nouvel abonné.
  • Vous avez besoin de présence. Le keep alive et le Last Will vous indiquent quand un appareil passe hors ligne.
  • Vous devez pousser des commandes vers des appareils précis derrière du NAT ou sur des liaisons cellulaires.

Si vous découvrez les brokers, ce que fait un broker MQTT couvre les bases, et le tutoriel MQTT détaille les topics, la QoS et les sessions.

Quand utiliser une file de messages

Une file est la bonne brique lorsque :

  • Chaque message est une tâche qui doit être traitée exactement une fois par un seul worker, comme générer une facture ou redimensionner une image.
  • Le travail doit survivre à de longues indisponibilités des consommateurs, pendant des heures ou des jours.
  • Vous avez besoin de réessais et d'une gestion des lettres mortes pour les messages qui échouent à répétition.
  • Producteurs et consommateurs sont des services backend sur des réseaux fiables.

Utiliser les deux ensemble

La plupart des plateformes IoT finissent par utiliser les deux. Les appareils publient vers un broker MQTT. Un service consommateur s'abonne, généralement via un abonnement partagé pour pouvoir monter en charge, filtre le flux pour ne garder que les événements à traiter, par exemple « alarme déclenchée » ou « lot terminé », et les place comme tâches dans RabbitMQ ou SQS. La télémétrie en direct continue d'alimenter les tableaux de bord via MQTT, tandis que les workflows métier durables s'exécutent à partir de la file. L'article MQTT vs AMQP inclut un pont fonctionnel en Python.

Pour la partie MQTT, décidez si vous l'exploitez vous-même ou si vous utilisez un broker MQTT cloud. ConnectMQ est un broker MQTT managé avec MQTT 3.1.1 et 5.0, TLS, retained messages, session expiry et, sur le plan Serverless payant, les abonnements partagés, plus l'isolation multi-tenant et des quotas par plan. C'est un broker, pas une file : il n'a pas de pont intégré vers une file, c'est donc votre service consommateur qui effectue le transfert, ce qui garde la frontière explicite.

Démarrer avec ConnectMQ

Utilisez un broker MQTT pour ce qu'il fait de mieux, la diffusion, l'état en direct et la connectivité des appareils, et associez-le à une file lorsque vous avez besoin de tâches durables. Créez un broker Serverless gratuit sur app.connectmq.com, sans carte bancaire, et essayez la démonstration de diffusion et d'abonnement partagé ci-dessus sur votre propre broker privé.

Questions fréquentes

Un broker MQTT est-il une file de messages ?

Pas au sens classique. Un broker MQTT achemine des copies de chaque message vers tous les abonnés actuels, alors qu'une file stocke chaque message jusqu'à ce qu'un consommateur le traite. MQTT possède des fonctionnalités proches d'une file, mais il reste fondamentalement du pub/sub.

MQTT peut-il garantir qu'un message n'est traité qu'une seule fois ?

La QoS 2 garantit une livraison exactement une fois entre un client et le broker, pas un traitement de bout en bout. Pour un traitement unique des tâches, utilisez des consommateurs idempotents ou confiez le travail à une file de messages.

Que deviennent les messages MQTT lorsque personne n'est abonné ?

Ils sont supprimés, sauf si le message est retained, auquel cas le broker le conserve comme dernière valeur du topic, ou si une session persistante existe pour un abonné hors ligne.

Faut-il utiliser RabbitMQ ou un broker MQTT pour les appareils IoT ?

Connectez les appareils à un broker MQTT, conçu pour de nombreux clients légers et intermittents. Utilisez RabbitMQ derrière lui pour les files de travail backend si vos workflows en ont besoin.

Articles liés

Qui a inventé MQTT ? L'histoire, des oléoducs à l'IoT

MQTT a été inventé en 1999 par Andy Stanford-Clark (IBM) et Arlen Nipper (Arcom) pour surveiller des oléoducs par satellite. Suivez son parcours vers l'open source, OASIS, l'ISO et les brokers MQTT managés d'aujourd'hui.

8 min de lecture

Pourquoi votre client MQTT se déconnecte sans cesse (et comment y remédier)

Les boucles de reconnexion sont l'un des problèmes MQTT les plus courants. Découvrez les cinq causes habituelles, des client ID en double aux timeouts de keep alive et aux paquets trop volumineux, et suivez une méthode de diagnostic qui identifie la vôtre.

9 min de lecture

Taille maximale d'un message MQTT : limites et stratégies pour les gros payloads

MQTT peut techniquement transporter un paquet de 256 Mo, mais les brokers, les bibliothèques clientes et les appareils imposent des limites bien plus basses. Découvrez où se trouvent les vraies limites, ce qui se passe quand on les dépasse et comment envoyer de gros payloads.

8 min de lecture

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.