02-notions-definitions du dépôt tutorials-nats, aligné sur la vidéo “NATS – 02. Notions & Définitions”. L’idée du chapitre : si les mots sont clairs, l’API devient beaucoup plus facile.
TL;DR
- Core NATS : subject, message, connection, publisher, subscriber, queue group, wildcards, request/reply.
- JetStream : stream, consumer, durable, replicas, retention, acks — la couche de persistance et de rejeu.
- Extras : KV store, ObjectStore, mirror, source, déduplication.
- Trust : token, NKEYS, JWT, account, operator — la chaîne d’authentification décentralisée.
- Topologie : cluster, leaf node, super-cluster, gateway, MQTT.
- Règle du chapitre : “c’est la carte” — si les mots sont clairs, l’API devient évidente.
La vidéo de référence
La vidéo NATS – 02. Notions & Définitions est le deuxième épisode de la formation NATS de la chaîne xavki, publiée le 3 août 2026 (~22 min). Elle fait partie du cours NATS – Tutorials de la chaîne, un parcours de 48 chapitres couvert par le dépôt tutorials-nats.02-notions-definitions/slides.md, rendu dans le terminal avec mdp. C’est la carte du territoire : chaque mot posé ici sera réutilisé dans les chapitres suivants.
Note : la vidéo ne dispose pas de transcription sous-titrée, cet article s’appuie donc sur le contenu des slides du dépôt, qui sert de colonne vertébrale factuelle à la série.
Subject : la clé de routage
Le subject est la clé de routage de NATS : une chaîne dot-separated commeorders.eu.created. Les publishers envoient vers un subject, les subscribers expriment leur intérêt sur un subject.
C’est à la fois l’adresse et une partie du design :
- un bon nommage rend le routage, le filtrage et la propriété plus faciles
- un mauvais nommage crée des consommateurs bruyants et des refactors douloureux plus tard
billing.invoice.paid — chaque service intéressé par les événements de facture payée peut s’y abonner.
Message : ce qui voyage dans NATS
Le message est ce qui circule réellement dans NATS :- un payload de bytes bruts
- un subject qui dit au serveur où il va
- des headers optionnels pour la métadonnée
- un reply subject optionnel pour le request/reply
- subject :
orders.created - payload :
{"id":42,"region":"eu"} - headers :
trace-id=abc123
Connection, Publisher, Subscriber
- Connection : un client relié à un
nats-server. En général, un processus ouvre une connexion et la réutilise ; les librairies clientes gèrent les reconnexions et le failover de cluster. - Publisher : du code qui appelle
publish(). Il envoie un message et, en général, ne sait pas qui le reçoit. - Subscriber : du code qui appelle
subscribe(). Il reçoit les messages correspondant aux subjects demandés — c’est là que l’intention de routage devient du travail réel.
users.created ; un service email s’abonne et envoie un email de bienvenue ; un service analytics s’abonne et incrémente des compteurs.
Queue Group : le load-balancing de NATS
Un queue group est un ensemble de subscribers partageant le même nom de queue. Tous écoutent le même subject, mais le serveur délivre chaque message à un seul membre. C’est le mécanisme de load-balancing de NATS, utile pour les workers, les consommateurs, les jobs en arrière-plan et les services sans état. Sur le même subject, des noms de queue différents créent des groupes indépendants ; sans queue group, chaque subscriber reçoit sa propre copie. Exemple des slides : 3 workers s’abonnent àimage.resize dans la queue resizers — chaque job de resize part vers un seul worker.
Subjects et wildcards
Hiérarchie de subjects :orders
orders.eu
orders.eu.created
orders.eu.created.priority-1Langage du code : CSS (css)
Wildcards :
*= exactement un token :orders.*.createdmatcheorders.eu.createdmais pasorders.eu.fr.created>= le reste de la queue du subject :orders.>matche tout ce qui est sousorders— très puissant, à utiliser avec précaution en production
orders.*.created est idéal pour un niveau de région ; orders.> est préférable pour les subscribers d’audit ou de debug.
Request / Reply : du RPC sur de la messagerie
Le requester envoie un message et attend une réponse :await nc.request(subject, payload, timeout=...). Le client crée un subject de réponse temporaire comme _INBOX.<id> — c’est simplement l’adresse de retour de la réponse.
Le responder s’abonne sur le subject de requête, lit le payload et répond à msg.reply. Du point de vue du client, cela ressemble à du RPC construit sur de la messagerie.
Point important : si personne n’écoute, un NATS moderne peut renvoyer un signal rapide no responders / 503, mieux qu’un long timeout quand le service n’existe pas.
Exemple des slides : une app demande auth.verify, le service auth répond ok ou denied ; si auth est down, l’appelant échoue vite au lieu de rester suspendu.
JetStream, Stream, Consumer : la persistance
JetStream est la couche de persistance de NATS : opt-in, activée sur le serveur avec-js. Elle transforme NATS de fire-and-forget en messagerie durable avec rejeu.
Stream : un log append-only lié à un ou plusieurs subjects. Exemple : le stream ORDERS stocke tous les messages orders.>. Les streams définissent stockage, retention, réplicas et limites.
Consumer : une position de lecture dans un stream. Deux modes :
- push consumer : le serveur pousse les messages
- pull consumer : le client récupère des lots quand il est prêt
ORDERS stocke orders.> ; un consumer “accounting” lit tous les événements de commande plus tard, même après un redémarrage.
Durable, réplicas, mode de livraison
Durable name : une identité persistante pour un consumer, qui se souvient où il s’est arrêté après un redémarrage — indispensable pour reprendre un travail proprement. Ephemeral consumer : un consumer temporaire sans identité durable — utile pour les lectures ad hoc, les tests, le debug et les outils de courte durée. Réplicas : combien de copies de l’état du stream existent dans le cluster.1 pour les setups locaux de dev les plus simples ; 3 est le choix courant en production pour la tolérance de panne. Plus de réplicas = plus de sécurité mais aussi plus de coût d’écriture.
Exemple des slides : le consumer billing-worker reprend au dernier message acké après un déploiement ; un stream avec replicas=3 survit mieux à la perte d’un nœud qu’avec replicas=1.
Retention et acks
Politiques de retention — quand un message peut-il quitter le stream ?- Limits : garder les messages jusqu’à ce que les limites de taille / nombre / âge soient atteintes — le plus proche d’un journal d’événements borné.
- Interest : garder les messages tant qu’au moins un consumer en a besoin.
- WorkQueue : retirer un message dès qu’un worker l’acke avec succès — le plus proche d’une sémantique de file de tâches.
ack: traité avec succèsnak: échec, réessayer bientôtterm: arrêter de retenter ce message empoisonnéin_progress: toujours en cours, prolonger le timer d’ack
payment.capture ; l’API externe est lente, il envoie in_progress ; après succès il envoie ack.
KV / ObjectStore / Mirror / Source / Déduplication
- KV store : une API clé-valeur construite sur des streams — idéale pour la config, l’aide à l’élection de leader et le suivi d’état. Les opérations paraissent plus simples que d’utiliser directement les subjects bruts.
- Object Store : de gros blobs découpés (chunked) sur des streams — utile pour les fichiers, artefacts, gros payloads et snapshots.
- Mirror : une copie en lecture seule d’un autre stream.
- Source : un stream qui ingère depuis un ou plusieurs streams.
- Déduplication : le publisher définit
Nats-Msg-Id, le serveur ignore les doublons dans la fenêtre de déduplication.
Token / NKEYS / JWT / Account / Operator
La chaîne de confiance de NATS, du plus simple au plus structuré :- Token : un secret partagé entre client et serveur — le client le présente pour être accepté. Le modèle d’authentification le plus simple, facile à démarrer mais plus dur à rotater et à gérer proprement à l’échelle.
- NKEYS : authentification par clé publique/privée Ed25519. Le client prouve qu’il possède la clé privée en signant un challenge ; évite de passer un secret partagé réutilisable sur le fil ; un pas commun au-dessus de l’auth par token.
- JWT : un document signé d’identité et de permissions — décrit un utilisateur ou un compte et ce qu’il a le droit de faire.
- Account : la frontière de tenant dans NATS. Chaque compte a son espace de subjects isolé par défaut ; le trafic inter-comptes ne passe que par des exports/imports explicites.
- Operator : la racine de confiance du déploiement NATS. Il signe les JWTs des comptes et permet la confiance décentralisée et les setups multi-tenants.
team-a ne peut publier que team-a.> ; le compte team-b ne voit pas ces subjects sans export/import explicite.
Cluster / Leaf Node / Super-cluster / Gateway / MQTT
La topologie NATS, du local au multi-DC :- Cluster : plusieurs nœuds
nats-serverdans la même zone de confiance. Les clients se connectent à un nœud, le cluster partage état et routage. - Leaf Node : un serveur en aval ou en edge attaché à un cluster central — utile pour les agences, usines, magasins, véhicules et sites distants. Réduit le besoin pour chaque client edge de se connecter directement au cœur.
- Super-cluster : plusieurs clusters reliés entre eux.
- Gateway : le lien inter-clusters qui transporte l’intérêt des subjects entre clusters.
- MQTT bridge / support MQTT :
nats-serveraccepte directement les clients MQTT 3.1.1 et 5.0 — utile quand les devices IoT et les services NATS doivent partager le même backbone.
Le récap du chapitre
Les slides concluent par la “carte” complète :- Core NATS : subject, message, connection, subscriber, queue group, request/reply
- JetStream : stream, consumer, durable, replicas, retention, acks
- Extras : KV, ObjectStore, mirror, source, dédup
- Trust : token, NKEYS, JWT, account, operator
- Topologie : cluster, leaf node, super-cluster, gateway, MQTT
Liens utiles
- Dépôt tutorials-nats (GitLab) — les 48 chapitres de la formation
- Chapitre 02 – Notions et Définitions (slides)
- Vidéo de référence (YouTube)
- Chaîne xavki (YouTube)
- Xavki Blog
- Documentation officielle NATS
- NATS by Example — exemples officiels par pattern
- SDK Python nats.py
- CLI nats
FAQ
Qu’est-ce qu’un subject dans NATS ?
C’est la clé de routage : une chaîne dot-separated (ex. orders.eu.created) vers laquelle les publishers envoient et sur laquelle les subscribers expriment leur intérêt. C’est à la fois l’adresse et une partie du design.
Quelle est la différence entre Core NATS et JetStream ?
Core NATS est du pub/sub + request/reply fire-and-forget (at-most-once). JetStream, activé avec nats-server -js, ajoute une couche de persistance durable (streams, consumers) avec rejeu — du at-least-once.
Comment NATS fait-il du load-balancing ?
Avec les queue groups : plusieurs subscribers partagent le même nom de queue, le serveur délivre chaque message à un seul membre. Sans queue group, chaque subscriber reçoit sa propre copie.
Que signifient * et > dans un subject ?* matche exactement un token (orders.*.created), > matche le reste de la queue (orders.>). > est très puissant, à utiliser avec précaution en production.
Qu’est-ce qu’un durable dans JetStream ?
C’est une identité persistante pour un consumer qui se souvient de sa position après un redémarrage. À l’inverse, un consumer ephemeral n’a pas d’identité durable (lecture ad hoc, tests, debug).
Quelles sont les politiques de retention JetStream ?
Limits (jusqu’aux limites de taille/nombre/âge), Interest (tant qu’un consumer en a besoin) et WorkQueue (retrait dès qu’un worker acke).
Quelle est la différence entre token, NKEYS et JWT ?
Le token est un secret partagé simple ; NKEYS est une authentification Ed25519 par preuve de possession de clé privée ; JWT est un document signé d’identité et de permissions. L’operator signe les JWTs des comptes, ce qui permet la confiance décentralisée et le multi-tenant.
Comment sécuriser l’isolation entre équipes ?
Avec les accounts : chaque compte a un espace de subjects isolé par défaut. Le trafic inter-comptes ne passe que par des exports/imports explicites. L’operator est la racine de confiance qui signe les JWTs des comptes.
À quoi sert un leaf node ?
À attacher un serveur edge (agence, usine, magasin, véhicule) à un cluster central, en réduisant le besoin pour chaque client edge de se connecter directement au cœur. C’est le modèle hub-and-spoke de NATS.
NATS supporte-t-il MQTT ?
Oui : nats-server accepte nativement les clients MQTT 3.1.1 et 5.0, utile quand les devices IoT et les services NATS doivent partager le même backbone.
Conclusion
Le chapitre 02 de la formation NATS de xavki est la carte du territoire : verrouiller le vocabulaire avant d’écrire du code. Core NATS (subject, message, queue group, wildcards, request/reply), JetStream (stream, consumer, durable, retention, acks), les extras (KV, ObjectStore, mirror, source, dédup), la chaîne de confiance (token, NKEYS, JWT, account, operator) et la topologie (cluster, leaf node, super-cluster, gateway, MQTT). Une fois ces notions posées, l’API de NATS devient beaucoup plus lisible. La suite logique est le chapitre 03 — NATS vs Alternatives — qui compare NATS à Kafka, RabbitMQ et Redis Streams.Transparence IA
Ce contenu a été partiellement rédigé ou structuré avec l aide d outils d intelligence artificielle, puis relu, corrigé et complété par l auteur avant publication.