ویرگول
ورودثبت نام
Roham
Rohamپیدا کردن خودم توی نوشته ها برام جذابه بهم یه حس خوب بودن می ده مخصوصا وقتی با طعم علم و خلاقیت همراه باشه هر روز که بیشتر با این دنیا آشنا می شم حس بهتری برای بیشتر دونستن و یاد دادن درونم رشد می کنه
Roham
Roham
خواندن ۱ دقیقه·۳ روز پیش

NATS چیست؟ توضیح ساده و کاربردی برای برنامه‌نویسان Golang

NATS and Go
NATS and Go

NATS چیه؟

NATS یک سیستم پیام‌رسانی (Message Broker / Messaging System) فوق‌العاده سریع، سبک و ساده است که کمک می‌کند سرویس‌ها و برنامه‌ها با هم حرف بزنند بدون اینکه مستقیم همدیگر را صدا بزنند.

یعنی چی؟

یعنی به جای اینکه سرویس A مستقیم به سرویس B درخواست بدهد، پیامش را می‌فرستد به NATS و B هر وقت آماده بود پیام‌ها را دریافت می‌کند.

مثل:

  • یک پستچی خیلی سریع و قابل اعتماد بین سرویس‌ها

  • ارتباط بدون نیاز به اینکه سرویس‌ها آدرس هم را بدانند

  • مناسب سیستم‌های میکروسرویس، realtime، IoT، event-driven


NATS چه کار می‌کند؟

NATS چند مدل ارتباطی دارد:

1) Publish / Subscribe

مثل رادیو
یک سرویس پیام می‌فرستد (publish)
چند سرویس می‌توانند همان پیام را گوش کنند (subscribe)

2) Request / Reply

مثل HTTP ولی به‌صورت پیام‌رسان
A درخواست می‌دهد → B جواب می‌دهد
(با سرعت خیلی بیشتر از REST)

3) Queue Groups

برای load-balancing
چند سرویس در یک گروه باشند → هر پیام فقط به یکی از آنها می‌رسد.

4) JetStream

سیستم پیام‌رسانی با Persistency
پیام‌ها ذخیره می‌شوند، Ack دارند، re-delivery دارند
(مثل Kafka ساده اما خیلی سبک‌تر)


چرا NATS پرطرفدار شده؟

  • سرعت وحشتناک بالا (میلیون‌ها پیام در ثانیه)

  • مصرف RAM بسیار کم

  • نصب ساده: فقط یک binary

  • ارتباط امن و پایدار

  • مناسب برای سیستم‌های real-time

  • مناسب معماری event-driven و microservices


در Golang چه کاری با NATS می‌شود کرد؟

گولنگ بهترین زبانیه که برای NATS وجود دارد، چون خود NATS هم با Go نوشته شده.

در Go می‌تونی:

پیام publish / subscribe کنی

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"))

سیستم Request/Reply بسازی

// 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))

از JetStream برای ذخیره پیام‌ها استفاده کنی

ذخیره، بازپخش، مصرف پیام‌ها با ack:

js, _ := nc.JetStream() js.Publish("events", []byte("hello"))

برای میکروسرویس‌ها event-driven مناسب است

  • ارسال رویداد payment

  • اطلاع‌رسانی ایجاد کاربر

  • پردازش asynchronous

  • هماهنگی سرویس‌ها


خلاصه خیلی ساده

NATS یک پیام‌رسان سریع برای اتصال سرویس‌هاست.
در Golang می‌توانی با آن Publish/Subscribe، Request/Reply، Queue، JetStream و انواع ارتباط‌های real-time را بسازی.

message brokergogolangmicroservices
۳
۰
Roham
Roham
پیدا کردن خودم توی نوشته ها برام جذابه بهم یه حس خوب بودن می ده مخصوصا وقتی با طعم علم و خلاقیت همراه باشه هر روز که بیشتر با این دنیا آشنا می شم حس بهتری برای بیشتر دونستن و یاد دادن درونم رشد می کنه
شاید از این پست‌ها خوشتان بیاید