Retry و Dead-Letter Queue در NATS JetStream با Go

در مقاله‌ی قبل یک Publisher و Worker ساده روی JetStream ساختیم. اما Workerِ آن مقاله فرض می‌کرد پردازش همیشه موفق است. در عمل پیام‌هایی هستند که هر بار fail می‌شوند. اگر کاری نکنیم، یا بی‌نهایت تکرار می‌شوند یا گم می‌شوند. در این مقاله سه چیز را اضافه می‌کنیم: محدود کردن تعداد تلاش‌ها با MaxDeliver فاصله‌ی بین تلاش‌ها با BackOff و NakWithDelay فرستادن پیام «سوخته» به یک صف dead-letter همه‌ی رفتارهای زیر را با یک سرور NATS تعبیه‌شده در Go (با JetStream) و کتابخانه‌ی nats.go آزمایش کرده‌ام و خروجی‌ها از همان آزمایش‌اند. ...

18 اکتبر 2026 · 4 دقیقه · Roham

یک Publisher و Worker ساده با NATS JetStream در Go

وقتی می‌خواهم یک مفهوم را واقعاً بفهمم، کوچک‌ترین نمونه‌ی قابل‌اجرا از آن را می‌سازم. این‌بار نوبت NATS JetStream بود. نتیجه، پروژه‌ی go-nats-demo است: یک Publisher، یک Worker و خود NATS، همه با Docker Compose. چرا JetStream؟ NATS معمولی پیام‌ها را فقط به مشترک‌هایی می‌رساند که همان لحظه متصل‌اند. اگر Worker پایین باشد، پیام از دست می‌رود. JetStream لایه‌ی پایداری روی NATS است: پیام‌ها در یک Stream ذخیره می‌شوند و Consumerها می‌توانند بعداً و با ack دریافتشان کنند. ...

18 اکتبر 2026 · 3 دقیقه · Roham