3️⃣ Publish/Subscribe Pattern 📣📡(بخش سوم)
ءPublish/Subscribe Pattern یک الگوی پیامرسانی غیرهمزمان است که در آن Publisherها پیامها یا Eventها را به یک Message Broker یا Event Bus مرکزی ارسال میکنند، بدون اینکه بدانند چه کسی مصرفکننده آنهاست.
در مقابل، Subscriberها علاقهمندی خود را به انواع خاصی از پیامها ثبت میکنند و بهصورت خودکار هنگام انتشار آنها را دریافت میکنند. این الگو منجر به یک Event-Driven Architecture با Coupling بسیار کم میشود.
🔍 تفاوت اصلی Publish/Subscribe با Point To Point Async Integration
ءPublish/Subscribe فرض میکند که چندین Subscriber میتوانند برای یک نوع Event وجود داشته باشند
ءPoint To Point Async Integration فرض میکند که فقط یک Subscriber برای هر نوع پیام وجود دارد
🔧 How it works:
🔹️ءPublisherها پیامها یا Eventها را به Topic یا Channelهای Message Broker ارسال میکنند بدون اینکه از Subscriberها اطلاعی داشته باشند
🔸️ءMessage Broker پیامها را دریافت، ذخیره و توزیع میکند
🔹️ءSubscriberها علاقهمندی خود را به Topic یا Event Type خاص ثبت میکنند
🔸️با انتشار یک پیام، Broker نسخهای از آن را به تمام Subscriberهای فعال ارسال میکند
🔹️چندین Subscriber میتوانند همزمان و مستقل یک پیام یکسان را پردازش کنند
🔸️این الگو از ارتباط One-to-Many پشتیبانی میکند
🔹️اضافه یا حذف Subscriberها نیازی به تغییر در Publisher ندارد
🔸️امکان Message Filtering وجود دارد تا هر Subscriber فقط پیامهای مرتبط را دریافت کند
✅ Benefits:
• ءDecoupling کامل بین Publisher و Subscriber
• ءScalability بالا با پردازش موازی پیامها توسط چند Subscriber
• مناسب برای Event-Driven Architecture
• افزودن قابلیتهای جدید فقط با اضافه کردن Subscriber جدید
• ءResilience بهتر؛ خطای یک Subscriber روی بقیه تأثیر ندارد
❌ Drawbacks:
• ءMessage Broker یک وابستگی مهم است و میتواند Single Point of Failure باشد
• ءDebugging و Tracing سختتر بهدلیل ماهیت غیرهمزمان
• چالشهای Eventual Consistency
• نیاز به طراحی دقیق برای Ordering پیامها و Duplicate Handling
🎯 Use cases:
🔹️سیستمهای Event-Driven که چند سرویس باید به یک Event واکنش نشان دهند
🔸️ءReal-time Notification (چت، داشبوردها، مانیتورینگ)
🔹️ءMicroservices برای همگامسازی دادهها از طریق Integration Events
🔸️سناریوهایی که سرویسهای جدید باید بدون تغییر Publisher به Eventها گوش دهند
🔹️ءWorkflowهایی که با یک Event چند مرحله در سرویسهای مختلف فعال میشوند