Les limites d'un broker MQTT public sont faciles à ignorer pendant la première heure enthousiaste d'un projet, et pénibles à découvrir devant un client. Cet article explique les quatre principales contraintes des brokers de test publics, en prenant broker.connectmq.com comme exemple concret, montre comment concevoir vos tests pour les respecter et liste les signaux clairs qu'il est temps de passer à un broker privé.
Pourquoi les brokers publics ont-ils des limites ?
Un broker public est un service partagé et anonyme. N'importe qui sur Internet peut se connecter, publier et s'abonner sans compte. Cette ouverture est précisément ce qui le rend utile pour les tutoriels et les tests rapides, et précisément la raison pour laquelle il a besoin de limites : sans elles, un seul script défaillant pourrait inonder le broker et le rendre inutilisable pour tous les autres.
Les limites ne sont pas un défaut. Ce sont elles qui gardent un service communautaire gratuit utilisable. ConnectMQ exploite broker.connectmq.com, son serveur MQTT public gratuit, exactement dans ce but : un endroit sans configuration pour apprendre MQTT, tester une bibliothèque ou montrer une démo, à côté de brokers privés pour les vraies charges de travail. L'article sur le serveur MQTT public gratuit explique comment utiliser efficacement broker.connectmq.com ; celui-ci se concentre sur ce qu'il ne peut pas faire.
Limite 1 : aucune confidentialité
Sur un broker public, chaque topic est lisible par chaque client. Un abonné à # reçoit tout ce qui est publié, sous réserve des protections propres au broker. Les noms de topics ne sont pas des secrets, et des préfixes obscurs ne font que réduire les collisions accidentelles.
Ce que cela signifie en pratique :
- Ne publiez jamais de données personnelles, de traces de localisation, de captures de caméra ni quoi que ce soit qui identifie une personne ou un logement.
- Ne publiez jamais d'identifiants, de clés d'API ou de mots de passe Wi-Fi, même « temporairement ».
- Ne pilotez jamais de vrais équipements depuis un topic public. N'importe qui peut publier sur votre topic de commande, pas seulement le lire.
- Partez du principe que les payloads sont enregistrés par quelqu'un, quelque part.
Utilisez un préfixe aléatoire comme connectmq/demo/9b2e7/ pour que votre trafic de test n'entre pas en collision avec celui des autres. C'est une politesse et une commodité, pas une mesure de sécurité.
Limite 2 : aucune garantie de service
Les brokers publics sont proposés au mieux, sans engagement. Il n'y a ni SLA, ni disponibilité garantie, ni engagement de support. Le broker peut redémarrer pour maintenance, les limites peuvent changer, et les sessions ne survivent pas au-delà de la fenêtre d'expiration. Sur broker.connectmq.com, l'expiration de session est plafonnée à 30 minutes : un appareil hors ligne plus longtemps repart de zéro.
Pour une démo ou un atelier, c'est parfait. Pour un produit, un pilote ou tout ce dont un client dépend, ça ne l'est pas.
Prévoyez les silences
Comme il n'y a aucune garantie, écrivez vos clients de test pour qu'ils supportent les interruptions. Activez la reconnexion automatique, réabonnez-vous dans le callback de connexion plutôt qu'une seule fois au démarrage, et ne considérez pas un message manquant comme un bug de votre code tant que vous n'avez pas écarté un redémarrage du broker. Ces habitudes sont de bonnes pratiques sur n'importe quel broker et facilitent le passage ultérieur en production.
Limite 3 : un espace de topics partagé
Tous les utilisateurs publics partagent une même arborescence de topics. Conséquences :
- Collisions. Des noms populaires comme
test,sensor/tempouhome/livingroomsont utilisés par beaucoup de monde. Vous recevrez leurs messages et ils recevront les vôtres. - Surprises avec les retained messages. Le retained message de quelqu'un d'autre sur un topic générique apparaîtra dès que vous vous abonnerez.
- Bruit des wildcards. Un abonnement trop large renvoie du trafic que vous n'avez jamais demandé et consomme votre budget de débit.
Préfixez toujours vos topics avec un préfixe unique et abonnez-vous de manière ciblée.
Limite 4 : limites de débit, de taille et d'abonnements
Le broker public plafonne les ressources par client pour que chacun bénéficie d'un accès équitable. Sur broker.connectmq.com, les limites sont les suivantes :
| Limite | Valeur sur le broker public | Pourquoi elle existe |
|---|---|---|
| Taille des messages | 64 Ko par message | Empêche les gros payloads d'accaparer la bande passante |
| Débit de publication | 10 messages par seconde et par client | Empêche les scripts d'inonder le broker |
| Abonnements | 10 par client | Limite le coût de diffusion par client |
| Profondeur des topics | 8 niveaux de topic | Garde la correspondance des topics efficace |
| QoS | 0, 1 et 2 | Comportement complet du protocole pour l'apprentissage |
| Expiration de session | Jusqu'à 30 minutes | Libère les ressources des sessions abandonnées |
| Authentification | Anonyme, tout client ID unique non vide | Aucune configuration pour les débutants |
Dépasser une limite peut entraîner le rejet d'opérations ou une déconnexion. Si vous vous connectez en MQTT 5, journalisez les reason codes reçus par votre client ; ils vous en disent bien plus qu'un générique « connexion perdue ».
Concevoir des tests qui respectent les limites
Voici un éditeur Python (paho-mqtt 2.x) qui reste largement dans les limites publiques : client ID unique, préfixe unique, topics peu profonds, débit plafonné et payloads compacts.
import json
import random
import time
import uuid
import paho.mqtt.client as mqtt
RUN_ID = uuid.uuid4().hex[:6]
PREFIX = f"connectmq/demo/{RUN_ID}" # 3 niveaux, laisse de la place en dessous
MAX_RATE = 5 # messages par seconde, sous le plafond de 10/s
INTERVAL = 1.0 / MAX_RATE
def on_connect(client, userdata, flags, reason_code, properties):
print("Connected:", reason_code, "prefix:", PREFIX)
def on_disconnect(client, userdata, flags, reason_code, properties):
print("Disconnected:", reason_code)
client = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
client_id=f"limits-demo-{RUN_ID}",
protocol=mqtt.MQTTv5,
)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect("broker.connectmq.com", 1883, keepalive=60)
client.loop_start()
try:
for i in range(50):
payload = json.dumps({"i": i, "t": round(20 + random.random() * 2, 2)})
assert len(payload.encode()) < 64 * 1024
client.publish(f"{PREFIX}/sensor/temp", payload, qos=1)
time.sleep(INTERVAL)
finally:
client.loop_stop()
client.disconnect()
Observez-le depuis un second terminal, en vous abonnant uniquement à votre propre préfixe :
mosquitto_sub -h broker.connectmq.com -p 1883 -i watch-RUNID -t "connectmq/demo/RUNID/#" -v
Remplacez RUNID par le préfixe affiché par le script.
Pièges courants
- Client ID vide. Le broker public exige un client ID non vide. Générez-en un unique à chaque exécution.
- Deux scripts avec le même client ID. Chaque connexion expulse l'autre, ce qui produit une boucle de reconnexion.
- Boucles de publication serrées. Une boucle
while Truesans pause dépasse la limite de débit en moins d'une seconde. - Arborescences de topics trop profondes.
connectmq/demo/abc/site/area/line/cell/machine/sensorcompte 9 niveaux et dépasse la limite de 8. Aplatissez vos topics de test. - JSON volumineux ou images. Tout ce qui approche 64 Ko a sa place sur un broker privé, et les images ont rarement leur place dans MQTT tout court.
Les signes qu'il est temps de passer à un broker privé
Quittez le broker public dès que vous remarquez l'un de ces points :
- Les données mettraient quelqu'un dans l'embarras ou lui nuiraient si un inconnu les lisait.
- Un appareil agit sur les commandes qu'il reçoit.
- Un client, un collègue ou un enseignant compte sur le fait que le système fonctionne demain.
- Vous avez besoin de plus de 10 abonnements par client, de messages plus volumineux ou de hiérarchies de topics plus profondes.
- Vous voulez voir qui est connecté et gérer des identifiants par appareil.
La comparaison broker MQTT public ou privé détaille la bascule, et passer du prototype à la production couvre le reste du parcours.
Ce qui change avec un plan privé
Un broker ConnectMQ privé, c'est-à-dire un broker MQTT managé, conserve le même protocole et le même code client, mais change les règles :
- Authentification avec un nom d'utilisateur, un mot de passe et un client ID générés, le client ID étant lié à ces identifiants.
- Isolation vis-à-vis des autres tenants : votre espace de topics vous appartient.
- TLS sur le port 8883 et Secure WebSocket sur le port 8084 avec un certificat Let's Encrypt.
- Des limites selon le plan : le plan Serverless gratuit autorise jusqu'à 25 connexions, QoS jusqu'à 1 et des messages de 256 Ko ; le plan Serverless payant porte cela à 1 000 connexions, QoS 2, messages de 1 Mo et abonnements partagés.
- Des outils dans le portail comme un client dans le navigateur, un explorateur de topics en direct, un tableau de bord et des alertes sur seuil.
Passez gratuitement à un broker ConnectMQ privé
Quand le serveur MQTT public gratuit a rempli son rôle, créez votre broker privé gratuit sur le plan Serverless, sans carte bancaire, et pointez le même script vers le port 8883 avec vos nouveaux identifiants. Lisez le guide du broker MQTT cloud pour planifier la suite, découvrez pourquoi un broker MQTT managé vous épargne du travail d'exploitation, ou rendez-vous sur connectmq.com pour comparer les plans.
Questions fréquentes
Est-il sûr d'utiliser un broker MQTT public ?
C'est sûr pour apprendre et faire des démos avec des données anodines. Ce ne l'est pas pour des données personnelles, des identifiants ou le pilotage de vrais équipements, car n'importe qui peut lire n'importe quel topic et y publier.
Que se passe-t-il si je dépasse la limite de débit du broker public ?
Des opérations peuvent être rejetées ou le client déconnecté. Restez sous 10 messages par seconde et par client, et vérifiez les reason codes MQTT 5 lors du débogage.
Pourquoi est-ce que je reçois des messages que je n'ai pas publiés ?
D'autres utilisateurs publient sur les mêmes noms de topics. Utilisez un préfixe unique comme connectmq/demo/<random-id>/ et abonnez-vous uniquement à ce préfixe.
Le broker public conserve-t-il ma session si mon appareil se déconnecte ?
Uniquement pendant la fenêtre d'expiration de session, plafonnée à 30 minutes sur broker.connectmq.com. Au-delà, l'appareil démarre une nouvelle session.



