NATS

NATS — простой быстрый брокер сообщений (Derek Collison, 2010, изначально для Cloud Foundry). CNCF-проект. Написан на Go. Публикация в subject, subscribe pattern. Минималистичный, embed-friendly.

Модель subject-based

# pub/sub через subjects
sub  "orders.*"      → получит orders.created, orders.paid
sub  "orders.>"      → получит orders.created.eu, orders.paid.us
pub  "orders.created" body

# queue group — одно сообщение одному подписчику из группы
sub  "orders.*" queue="workers"

Протокол — plain text

CONNECT {"verbose":false}\r\n
SUB orders.* 1\r\n
PUB orders.created 5\r\n
hello\r\n
MSG orders.created 1 5\r\n
hello\r\n
PING\r\n
PONG\r\n

Можно debug через telnet.

Core NATS vs JetStream

Core NATSJetStream
Persistencefire-and-forgetна диск
Replayнетпо offset/time
At-least-onceнетда
Latencyмикросекундымиллисекунды

JetStream

Persistent слой поверх NATS (с 2020). Streams (топики), consumers, replay, KV store, Object store. Аналог Kafka+Redis в одном.

Request-Reply

# RPC поверх pub/sub
Клиент:  sub "_INBOX.abc123"
Клиент:  pub "user.get" reply="_INBOX.abc123" body="id=42"
Сервер:  sub "user.get"
Сервер:  получает msg, отвечает pub "_INBOX.abc123" body='{"name":"Vasya"}'
Клиент:  получает ответ

Cluster / Leaf / Super-cluster

Что решает лучше других

Клиенты

Go, Node, Python, Java, .NET, Rust, C, WebSocket (nats.ws). Простое TCP+text = кто угодно.

См. также

← на главную