NATS has grown in popularity as a lightweight, high-performance messaging system for distributed systems and microservices. If you work with NATS on an international team, you’ll need clear English to describe subjects, delivery guarantees, and stream persistence. This guide covers the core vocabulary for NATS messaging developers.
Key Vocabulary
Subject — the string used to address a message in NATS, similar to a topic, which subscribers match against to receive messages.
“We publish order events to the subject orders.created, and our billing service subscribes to orders.> to catch all order-related events.”
Publish-subscribe — the core NATS messaging pattern where a publisher sends a message to a subject, and any number of subscribers can receive it. “With publish-subscribe, adding a new service that needs order events doesn’t require changing the publisher at all — it just subscribes.”
JetStream — the persistence layer built on top of core NATS, adding message storage, replay, and at-least-once delivery guarantees. “Core NATS is fire-and-forget, so we use JetStream whenever we need messages to survive a subscriber being temporarily offline.”
Stream — a JetStream construct that stores messages published to one or more subjects, retaining them according to a configured policy.
“We created a stream that captures all subjects under orders.* and retains messages for thirty days.”
Consumer — an entity that reads messages from a JetStream stream, tracking its own position so it can resume after a restart. “Each service runs its own durable consumer on the orders stream, so restarting one service doesn’t affect the others’ progress.”
Acknowledgement (ack) — a signal a consumer sends back to JetStream confirming it successfully processed a message, allowing at-least-once delivery. “If a consumer crashes before acknowledging a message, JetStream redelivers it once the consumer reconnects.”
Wildcard subscription — a subscription using * or > to match multiple subjects at once, such as one level or all remaining levels.
“We subscribe to orders.*.updated to catch update events for any order type in a single subscription.”
Queue group — a set of subscribers sharing a name, where NATS delivers each message to only one member of the group, enabling load balancing. “We put all instances of our worker service in the same queue group, so each incoming job is handled by exactly one instance.”
Discussing Delivery Guarantees
- “Core NATS gives us at-most-once delivery — fine for ephemeral telemetry, but not for anything we can’t afford to lose.”
- “We moved billing events onto JetStream because we needed at-least-once delivery with replay if a consumer falls behind.”
- “Our consumer explicitly acknowledges messages only after the database write succeeds, to avoid losing data on a mid-process crash.”
Talking About Scaling and Load Balancing
- “Using a queue group let us scale our worker service horizontally without any messages being processed twice under normal operation.”
- “We separated read-heavy consumers from write-heavy ones by subject, so a slow consumer on one subject doesn’t back up unrelated traffic.”
- “Wildcard subscriptions kept our subscriber code simple — we didn’t need to hardcode every possible order type.”
Professional Tips
- Be precise about delivery guarantees in documentation. “At-least-once” and “at-most-once” sound similar but have very different implications for data integrity.
- Explain queue groups in terms of load distribution, not just terminology. “Only one instance handles each message” is clearer than the raw term to non-NATS-familiar reviewers.
- Design consumers to be idempotent. At-least-once delivery means duplicate messages are expected, not exceptional.
Practice Exercise
- Explain to a teammate, in 3-4 sentences, the difference between core NATS and JetStream.
- Write a short explanation (4-5 sentences) of why your service uses a queue group instead of individual subscriptions.
- Describe, in plain English, how at-least-once delivery affected the design of your message handler, and why idempotency mattered.
Navigating the Nuances of Feedback & Collaboration
Let’s be honest – understanding technical jargon is only half the battle when you’re a developer working in a global team. The real challenge often lies in conveying your ideas clearly and receiving feedback constructively, particularly when differences in native language skills are present. It’s not just about knowing the definitions of “stream” or “consumer”; it’s about how you articulate those concepts to colleagues who might interpret them differently based on their own understanding of English – and perhaps even their own cultural communication styles. A well-crafted message can prevent misunderstandings, streamline collaboration, and ultimately, improve the quality of your code.
Consider a scenario: You’ve submitted a pull request (PR) detailing a change to a NATS JetStream consumer’s configuration. The reviewer leaves a comment in the PR description: “Could you elaborate on why you chose this specific retry policy? It seems aggressive and might impact throughput.” Initially, you might feel defensive or frustrated by what feels like a vague criticism. However, framing your response strategically – using precise language – can de-escalate the situation and lead to a productive discussion. Instead of saying something like “I just thought it would work,” which is imprecise and doesn’t explain why you made that decision, try: “I considered a more aggressive retry policy to ensure data durability in the event of transient network issues, aligning with our ‘at-least-once’ delivery guarantees for this stream. I’ve documented the potential impact on throughput and will monitor it closely after deployment.” Notice how the revised response explicitly states your reasoning, references relevant concepts (data durability, at-least-once), and demonstrates awareness of a potential concern.
Furthermore, Slack conversations often require careful wording. Imagine you’re debugging an issue with a consumer that isn’t processing messages as expected. You send a quick message to your team: “Consumer not working – need help!” While technically correct, it lacks crucial context. A more effective message would be: “The order-processor consumer is experiencing intermittent failures; messages are appearing lost in the stream. I’ve checked the logs and suspect a potential issue with the JetStream connection pool exhaustion. I’m currently investigating [link to relevant log snippet] – any insights appreciated.” This detailed approach immediately provides your colleagues with the information they need to assist you efficiently, reducing back-and-forth and accelerating problem resolution.
natsctl stream stats -s my_stream --consumer order-processor
This command (using natsctl, NATS’s command-line tool) illustrates a practical application of the vocabulary we’ve discussed. The output provides metrics – key performance indicators – related to the order-processor consumer on the my_stream stream, allowing you to objectively assess its behavior and pinpoint potential issues. The ability to clearly interpret this output and communicate your findings effectively is crucial for proactive monitoring and ensuring the stability of your NATS messaging system.
Keep practising
Turn this article into muscle memory
Five-minute exercises with instant feedback — built from the same kind of real IT language.
What to read next
Frequently asked questions
What will I learn from "English for NATS Messaging Developers"?
This is a Intermediate-level Vocabulary article covering vocabulary, nats, messaging and distributed-systems. Master English vocabulary for NATS messaging development — subjects, JetStream, consumers, streams, and at-least-once delivery.
Is this article free to read?
Yes. Every article on CoderSlingo, including this one, is free to read with no account, sign-up, or paywall.
How is reading this article different from doing an exercise?
Articles like this one explain concepts and vocabulary in context through prose, while exercises are interactive drills — fill-in-the-blank, matching, and multiple-choice — that test and reinforce specific terms. Reading builds understanding; exercises build recall.
Can I practice the vocabulary used in this article?
Yes — this article's topic lines up with our vocabulary exercises. Use the "Practice this vocabulary" link below to jump straight into a matching drill.
How long does "English for NATS Messaging Developers" take to read?
About 7 min. Most CoderSlingo articles, including this one, are written to be read in one sitting, without needing a dictionary open in another tab.
Do I need to create an account to read or save this article?
No account is required to read any article. If you complete exercises elsewhere on the site, your progress is saved locally in your browser — no login needed.
What if I don't understand a technical term used in this article?
Check the site Glossary for plain-English definitions of common IT terms, or browse the #vocabulary tag page for other Vocabulary articles that use the same vocabulary in different contexts.
Can I share or link to "English for NATS Messaging Developers"?
Yes — use the Twitter/X or LinkedIn share buttons at the end of the article, or copy the page URL directly. Attribution back to CoderSlingo is appreciated but the content is free to reference.
When was this Vocabulary article published?
This article was published in 2026. New Vocabulary articles are added regularly — visit the #vocabulary tag page to see the full, continuously updated list.
Where can I find more articles like this one?
See "English for NATS JetStream", "Kafka KRaft Mode: Technical English for ZooKeeper-free Clusters", "English for Apache Pulsar Messaging" in the Related Articles section below, or browse all Vocabulary articles from the main Blog index.