Un broker MQTT public gratuit est le moyen le plus rapide d'essayer MQTT : pas de compte, pas d'installation, juste un nom d'hôte et un port. Dans ce tutoriel, vous allez vous connecter à broker.connectmq.com, le serveur MQTT public gratuit de ConnectMQ, découvrir les règles et les limites de sa zone publique anonyme, et exécuter des exemples fonctionnels avec la CLI Mosquitto, Python, Node.js et le navigateur. À la fin, vous saurez exactement quand il est temps de passer à un broker privé.
Si vous découvrez le protocole, commencez par Qu'est-ce qu'un broker MQTT ? puis revenez ici pour la partie pratique.
Qu'est-ce qu'un broker MQTT public gratuit ?
Un broker MQTT public est un broker auquel n'importe qui sur Internet peut se connecter sans identifiants. Il sert à apprendre, à faire des démos, à prototyper rapidement et à déboguer du code client. Vous disposez d'un vrai broker qui parle MQTT 3.1.1 et MQTT 5.0, mais vous le partagez avec tous ceux qui testent au même moment.
Ce partage a une conséquence importante : tout ce que vous publiez dans la zone publique peut être lu par n'importe qui. Considérez-la comme un tableau blanc public. Elle est parfaite pour un « hello world », des simulations de capteurs et des expériences sur le protocole, et totalement inadaptée aux mots de passe, aux données personnelles ou au trafic de production.
Paramètres de connexion à broker.connectmq.com
Le serveur MQTT public gratuit de ConnectMQ écoute sur quatre endpoints. Choisissez celui qui correspond à votre client et à votre réseau.
| Protocole | Port | URL | Usage typique |
|---|---|---|---|
| MQTT (TCP) | 1883 | mqtt://broker.connectmq.com:1883 | Outils en ligne de commande, microcontrôleurs, tests rapides |
| MQTT sur TLS | 8883 | mqtts://broker.connectmq.com:8883 | Connexions chiffrées depuis des serveurs et des appareils |
| WebSocket | 8083 | ws://broker.connectmq.com:8083/mqtt | Expériences web en local |
| WebSocket sécurisé | 8084 | wss://broker.connectmq.com:8084/mqtt | Navigateurs et pages HTTPS |
Les ports 8883 et 8084 utilisent un certificat Let's Encrypt : les bundles CA standard des systèmes d'exploitation le valident sans fichier supplémentaire. Si votre réseau bloque les ports inhabituels, le WSS sur le port 8084 est souvent la solution la plus simple, car il ressemble à du trafic HTTPS classique pour la plupart des proxys.
Règles d'accès anonyme
Vous n'avez besoin ni de nom d'utilisateur ni de mot de passe. Trois règles simples s'appliquent :
- Utilisez un client ID non vide. Connectez-vous sans nom d'utilisateur ni mot de passe, mais avec un client ID comme
demo-7f3a91. Un client ID vide est refusé. Rendez-le unique : selon la spécification MQTT, une seconde connexion avec le même ID reprend la session et le premier client est déconnecté. - Utilisez un préfixe de topic unique. Placez tout sous un préfixe que personne ne devinera, par exemple
connectmq/demo/<your-random-id>/.... Vous évitez ainsi les collisions avec les autres testeurs et gardez une arborescence de topics propre. - Partez du principe que tout est public. Les clients anonymes arrivent dans une zone publique partagée. Les clients publics ne voient que les topics des autres clients publics (ils sont isolés des tenants payants), mais à l'intérieur de la zone publique, n'importe quel client peut s'abonner à
#et lire vos messages.
Une astuce pratique consiste à générer une fois un ID aléatoire et à le réutiliser à la fois comme base de client ID et comme préfixe de topic :
export ID=demo-$(openssl rand -hex 3)
echo $ID # par ex. demo-7f3a91
Limites de la zone publique
La zone publique est généreuse pour les tests, mais volontairement bornée pour rester saine pour tout le monde.
| Limite | Valeur |
|---|---|
| Taille maximale d'un message | 64 Ko |
| Débit de publication | 10 messages par seconde et par client |
| Abonnements | 10 par client |
| Profondeur des topics | 8 niveaux maximum |
| Niveaux de QoS | 0, 1 et 2 |
| Retained messages | Pris en charge |
Abonnements avec wildcards (+, #) |
Pris en charge |
Shared subscriptions ($share/{group}/{filter}) |
Prises en charge |
| Expiration de session | Jusqu'à 30 minutes |
Si vous dépassez un quota, les clients MQTT 5 reçoivent un reason code tel que 0x97 (Quota exceeded) au lieu d'un échec silencieux, ce qui facilite grandement le débogage. Vous hésitez sur la QoS à choisir ? Consultez Les niveaux de QoS MQTT expliqués.
Tester le broker MQTT public gratuit avec la CLI Mosquitto
Les outils en ligne de commande Eclipse Mosquitto sont le moyen le plus rapide de voir circuler des messages. Ouvrez deux terminaux.
Terminal 1 — abonnez-vous à votre préfixe :
mosquitto_sub -h broker.connectmq.com -p 1883 -i $ID-sub -t "connectmq/demo/$ID/#" -v
Terminal 2 — publiez un message :
mosquitto_pub -h broker.connectmq.com -p 1883 -i $ID-pub -t "connectmq/demo/$ID/temperature" -m '{"value": 22.5, "unit": "C"}'
Le terminal 1 affiche le topic suivi du payload. Pour utiliser le port chiffré, ajoutez le bundle CA de votre système (chemin valable pour la plupart des distributions Linux) :
mosquitto_pub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs -i $ID-tls -t "connectmq/demo/$ID/tls" -m "hello over TLS" -V mqttv5
Sous Windows ou macOS, pointez plutôt --cafile vers un bundle CA au format PEM (par exemple celui fourni avec Git for Windows). L'option -V mqttv5 fait passer le client en MQTT 5.0.
Démonstration des retained messages
Un retained message est stocké par le broker et remis immédiatement à chaque nouvel abonné du topic. C'est idéal pour les valeurs de « dernier état connu », comme le statut d'un appareil.
# Publier un statut retenu
mosquitto_pub -h broker.connectmq.com -p 1883 -i $ID-pub -t "connectmq/demo/$ID/status" -m "online" -r -q 1
# Un tout nouvel abonné le reçoit instantanément, bien qu'il ait été publié plus tôt
mosquitto_sub -h broker.connectmq.com -p 1883 -i $ID-late -t "connectmq/demo/$ID/status" -v -C 1 -W 5
# Effacer le retained message en publiant un payload retenu vide
mosquitto_pub -h broker.connectmq.com -p 1883 -i $ID-pub -t "connectmq/demo/$ID/status" -n -r
Effacez toujours vos retained messages de test une fois terminé : cela garde la zone publique propre.
Démonstration du Last Will and Testament
Un Last Will est un message que le broker publie à votre place si votre client se déconnecte de manière inattendue. Laissez tourner l'abonné du terminal 1, puis démarrez un « appareil » avec un will :
mosquitto_sub -h broker.connectmq.com -p 1883 -i $ID-device -t "connectmq/demo/$ID/cmd" -k 5 --will-topic "connectmq/demo/$ID/status" --will-payload "offline" --will-qos 1
Tuez maintenant ce terminal ou le processus (fermer la fenêtre suffit ; une déconnexion propre via Ctrl+C peut ne pas déclencher le will avec tous les clients). En quelques secondes, une fois le keep-alive expiré, le terminal 1 affiche :
connectmq/demo/demo-7f3a91/status offline
Nous avons vérifié ces commandes sur broker.connectmq.com lors de la rédaction de ce guide.
Exemple Python (paho-mqtt 2.x)
Installez le client avec pip install "paho-mqtt>=2.0". Le script ci-dessous se connecte en TLS, s'abonne à son préfixe et publie une mesure.
import json
import ssl
import uuid
import paho.mqtt.client as mqtt
DEVICE_ID = f"demo-{uuid.uuid4().hex[:6]}"
PREFIX = f"connectmq/demo/{DEVICE_ID}"
def on_connect(client, userdata, flags, reason_code, properties):
print(f"Connected: {reason_code}")
client.subscribe(f"{PREFIX}/#", qos=1)
client.publish(f"{PREFIX}/temperature", json.dumps({"value": 21.8}), qos=1)
def on_message(client, userdata, msg):
print(f"{msg.topic} -> {msg.payload.decode()}")
client = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
client_id=DEVICE_ID,
protocol=mqtt.MQTTv5,
)
client.tls_set(cert_reqs=ssl.CERT_REQUIRED) # utilise le magasin de CA du système
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 8883, keepalive=30)
client.loop_forever()
Notez qu'aucun appel à username_pw_set() n'est nécessaire dans la zone publique. Pour du TCP en clair, supprimez tls_set() et utilisez le port 1883.
Exemple Node.js (MQTT.js en mqtts et wss)
Installez MQTT.js v5 avec npm install mqtt. Le même code fonctionne en TLS ou en WebSocket sécurisé : seule l'URL change.
import mqtt from "mqtt";
import { randomBytes } from "node:crypto";
const clientId = `demo-${randomBytes(3).toString("hex")}`;
const prefix = `connectmq/demo/${clientId}`;
// Option A : MQTT sur TLS
const url = "mqtts://broker.connectmq.com:8883";
// Option B : MQTT sur WebSocket sécurisé
// const url = "wss://broker.connectmq.com:8084/mqtt";
const client = mqtt.connect(url, { clientId, protocolVersion: 5 });
client.on("connect", () => {
console.log("Connected as", clientId);
client.subscribe(`${prefix}/#`, { qos: 1 });
client.publish(`${prefix}/humidity`, JSON.stringify({ value: 48 }), { qos: 1 });
});
client.on("message", (topic, payload) => {
console.log(topic, payload.toString());
});
client.on("error", (err) => console.error(err.message));
Exemple dans le navigateur en WSS
Les navigateurs ne peuvent pas ouvrir de sockets TCP bruts : ils utilisent donc MQTT sur WebSocket. Les pages servies en HTTPS doivent utiliser wss:// sur le port 8084. Empaquetez le code ci-dessous avec votre outil préféré (Vite, webpack, esbuild) :
import mqtt from "mqtt";
const clientId = "web-" + Math.random().toString(16).slice(2, 8);
const prefix = `connectmq/demo/${clientId}`;
const client = mqtt.connect("wss://broker.connectmq.com:8084/mqtt", {
clientId,
protocolVersion: 5,
});
client.on("connect", () => {
client.subscribe(`${prefix}/#`);
client.publish(`${prefix}/hello`, "Hello from the browser");
});
client.on("message", (topic, payload) => {
const line = document.createElement("div");
line.textContent = `${topic}: ${payload.toString()}`;
document.body.appendChild(line);
});
Pour approfondir les chemins, les ports et les proxys, lisez MQTT sur WebSocket.
Serveur MQTT public gratuit ou broker privé
Le serveur MQTT public gratuit est un bac à sable, réservé aux tests et aux prototypes. Passez à un broker privé dès que l'une de ces conditions est remplie :
| Vous avez besoin de… | Serveur MQTT public gratuit | Broker privé sur app.connectmq.com |
|---|---|---|
| Confidentialité | N'importe qui dans la zone publique peut lire vos topics | Les topics d'un tenant sont isolés des autres tenants et de la zone publique |
| Authentification | Anonyme, client ID uniquement | Nom d'utilisateur, mot de passe et client ID émis pour chaque broker |
| Taille des messages | 64 Ko | 256 Ko en Serverless (Free), 1 Mo en Serverless (Paid) |
| Connexions | Pour les tests | Jusqu'à 25 (Free), jusqu'à 1 000 (Paid), ou un cluster Dedicated |
| Outillage | Vos propres clients | Portail avec client MQTT dans le navigateur, explorateur de topics en temps réel, tableau de bord et règles d'alerte |
Signes typiques que vous avez dépassé la zone publique : vous envoyez de vraies données clients ou d'appareils, vous ne voulez plus que d'autres voient vos noms de topics, vous avez besoin d'identifiants stables pour une flotte d'appareils, ou vous voulez un tableau de bord et des alertes sur vos données. La migration se résume surtout à un changement de configuration : gardez le même code et ajoutez le nom d'utilisateur, le mot de passe et le client ID fournis par le portail :
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="YOUR_CLIENT_ID", protocol=mqtt.MQTTv5)
client.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
client.tls_set()
client.connect("broker.connectmq.com", 8883)
Avant la mise en production, passez en revue nos bonnes pratiques de sécurité MQTT.
Démarrer avec ConnectMQ
Prêt à garder vos données privées ? Passez à un broker MQTT managé privé. Créez un compte gratuit sur app.connectmq.com : l'offre Serverless (Free) ne demande pas de carte bancaire. Choisissez une offre, créez un broker et copiez le nom d'utilisateur, le mot de passe et le client ID générés. Votre premier message privé n'est qu'à quelques minutes.
Questions fréquentes
broker.connectmq.com est-il vraiment gratuit ?
Oui. La zone publique de broker.connectmq.com est gratuite pour les tests, l'apprentissage et les démos, sans inscription. Elle est soumise à des limites d'usage raisonnable, comme 64 Ko par message et 10 messages par seconde et par client.
Faut-il un nom d'utilisateur et un mot de passe pour le broker MQTT public ?
Non. Connectez-vous sans identifiants, avec un client ID unique et non vide. Un client ID vide est refusé.
D'autres personnes peuvent-elles voir mes messages sur un broker MQTT public ?
Oui. Tout ce qui est publié dans la zone publique peut être lu par n'importe quel autre client public : utilisez un préfixe de topic unique et n'envoyez jamais de données personnelles ou sensibles. Pour des données privées, créez un broker sur app.connectmq.com.
Quelles versions de MQTT et quels ports le serveur MQTT public gratuit prend-il en charge ?
Il prend en charge MQTT 3.1.1 et MQTT 5.0 en TCP sur le port 1883, en TLS sur le port 8883, en WebSocket sur le port 8083 et en WebSocket sécurisé sur le port 8084 (chemin /mqtt).
Puis-je utiliser le broker MQTT public gratuit en production ?
Il n'est pas conçu pour la production. Pour tout déploiement réel, utilisez un broker MQTT managé ConnectMQ privé avec identifiants, isolation des tenants et limites plus élevées.



