Forward from: Learning With M
امروز میخوام در مورد Exchange ها در RabbitMQ براتون بگم. Exchange ها مثل پستچیهای پیامرسان عمل میکنن و تصمیم میگیرن پیامها رو چطوری به صفها (Queue) برسونن. بیاید ببینیم هر کدوم چیکار میکنن:
Direct Exchange 🎯
کارش چیه؟
پیامها رو فقط به صفهایی میفرسته که کلید مسیریابی (Routing Key) دقیقاً همون چیزی باشه که تعیین کردیم.
کی استفاده کنیم؟
وقتی میخوایم پیامها رو دقیقاً به یک صف خاص برسونیم. مثلاً پیامهای "سفارش جدید" فقط به صف "پردازش سفارش" برن.
مثال:
Routing Key: order.created ➡️ Queue: order_queue
Fanout Exchange 📢
کارش چیه؟
پیامها رو به همه صفهای متصل شده میفرسته، بدون توجه به کلید مسیریابی.
کی استفاده کنیم؟
وقتی میخوایم یک پیام رو به چندین صف ارسال کنیم. مثلاً ارسال اطلاعرسانی به همه گروه های کاربران.
مثال:
پیام: "تخفیف ویژه!" ➡️ Queue: user_group1_queue, user_group2_queue, user_group3_queue
Topic Exchange 🌐
کارش چیه؟
پیامها رو بر اساس الگوهای کلید مسیریابی ارسال میکنه. مثلاً میتونیم از wildcard (* و #) استفاده کنیم.
کی استفاده کنیم؟
وقتی میخوایم پیامها رو بر اساس موضوعهای مختلف دستهبندی کنیم. مثلاً خطاهای سیستم (error.*) یا لاگهای عمومی (log.#).
مثال:
Routing Key: error.database ➡️ Queue: error_queue
Direct Exchange 🎯
کارش چیه؟
پیامها رو فقط به صفهایی میفرسته که کلید مسیریابی (Routing Key) دقیقاً همون چیزی باشه که تعیین کردیم.
کی استفاده کنیم؟
وقتی میخوایم پیامها رو دقیقاً به یک صف خاص برسونیم. مثلاً پیامهای "سفارش جدید" فقط به صف "پردازش سفارش" برن.
مثال:
Routing Key: order.created ➡️ Queue: order_queue
Fanout Exchange 📢
کارش چیه؟
پیامها رو به همه صفهای متصل شده میفرسته، بدون توجه به کلید مسیریابی.
کی استفاده کنیم؟
وقتی میخوایم یک پیام رو به چندین صف ارسال کنیم. مثلاً ارسال اطلاعرسانی به همه گروه های کاربران.
مثال:
پیام: "تخفیف ویژه!" ➡️ Queue: user_group1_queue, user_group2_queue, user_group3_queue
Topic Exchange 🌐
کارش چیه؟
پیامها رو بر اساس الگوهای کلید مسیریابی ارسال میکنه. مثلاً میتونیم از wildcard (* و #) استفاده کنیم.
کی استفاده کنیم؟
وقتی میخوایم پیامها رو بر اساس موضوعهای مختلف دستهبندی کنیم. مثلاً خطاهای سیستم (error.*) یا لاگهای عمومی (log.#).
مثال:
Routing Key: error.database ➡️ Queue: error_queue