
NATS یک سیستم پیامرسانی (Message Broker / Messaging System) فوقالعاده سریع، سبک و ساده است که کمک میکند سرویسها و برنامهها با هم حرف بزنند بدون اینکه مستقیم همدیگر را صدا بزنند.
یعنی چی؟
یعنی به جای اینکه سرویس A مستقیم به سرویس B درخواست بدهد، پیامش را میفرستد به NATS و B هر وقت آماده بود پیامها را دریافت میکند.
مثل:
یک پستچی خیلی سریع و قابل اعتماد بین سرویسها
ارتباط بدون نیاز به اینکه سرویسها آدرس هم را بدانند
مناسب سیستمهای میکروسرویس، realtime، IoT، event-driven
NATS چند مدل ارتباطی دارد:
مثل رادیو
یک سرویس پیام میفرستد (publish)
چند سرویس میتوانند همان پیام را گوش کنند (subscribe)
مثل HTTP ولی بهصورت پیامرسان
A درخواست میدهد → B جواب میدهد
(با سرعت خیلی بیشتر از REST)
برای load-balancing
چند سرویس در یک گروه باشند → هر پیام فقط به یکی از آنها میرسد.
سیستم پیامرسانی با Persistency
پیامها ذخیره میشوند، Ack دارند، re-delivery دارند
(مثل Kafka ساده اما خیلی سبکتر)
سرعت وحشتناک بالا (میلیونها پیام در ثانیه)
مصرف RAM بسیار کم
نصب ساده: فقط یک binary
ارتباط امن و پایدار
مناسب برای سیستمهای real-time
مناسب معماری event-driven و microservices
گولنگ بهترین زبانیه که برای NATS وجود دارد، چون خود NATS هم با Go نوشته شده.
در Go میتونی:
nc, _ := nats.Connect(nats.DefaultURL) nc.Subscribe("orders.created", func(m *nats.Msg) { fmt.Println("Order received:", string(m.Data)) }) nc.Publish("orders.created", []byte("Order #123"))
// Server nc.Subscribe("get.time", func(m *nats.Msg) { m.Respond([]byte(time.Now().String())) }) // Client resp, _ := nc.Request("get.time", nil, time.Second) fmt.Println("Server time:", string(resp.Data))
ذخیره، بازپخش، مصرف پیامها با ack:
js, _ := nc.JetStream() js.Publish("events", []byte("hello"))
ارسال رویداد payment
اطلاعرسانی ایجاد کاربر
پردازش asynchronous
هماهنگی سرویسها
NATS یک پیامرسان سریع برای اتصال سرویسهاست.
در Golang میتوانی با آن Publish/Subscribe، Request/Reply، Queue، JetStream و انواع ارتباطهای real-time را بسازی.