در RabbitMQ، چهار مفهوم اصلی وجود دارد که پایه و اساس تبادل پیامها را تشکیل میدهند: Queue، Exchange، Binding و Routing Key. درک درست این مفاهیم برای طراحی معماری پیامرسانی مطمئن و مقیاسپذیر ضروری است.
Queue (صف)
صف محل ذخیرهسازی پیامها تا زمان مصرف توسط Consumer است. پیامها در صف منتظر میمانند و مصرفکنندهها آنها را به ترتیب دریافت میکنند. صفها میتوانند پایدار (Durable) باشند تا در صورت ریاستارت سرور از بین نروند، یا موقت (Transient) باشند که پس از مصرف یا خاموش شدن سرور حذف شوند.
ویژگیها:
- FIFO: پیامها به ترتیب ورود پردازش میشوند.
- پایداری: امکان ذخیره طولانی مدت پیامها در صفهای Durable.
- پشتیبانی از چندین Consumer برای تقسیم بار.
Exchange (مبادلهگر)
Exchange وظیفه مسیریابی پیامها از Producer به صفها را بر عهده دارد. وقتی Producer پیامی را ارسال میکند، ابتدا به Exchange میرود و Exchange بر اساس نوع و قوانین Binding پیام را به صفهای مناسب هدایت میکند.
انواع Exchange:
- Direct Exchange: مسیریابی دقیق بر اساس Routing Key.
- Fanout Exchange: ارسال پیام به همه صفهای متصل بدون توجه به Routing Key.
- Topic Exchange: مسیریابی با الگوهای متنی و Wildcard.
- Headers Exchange: مسیریابی بر اساس هدرهای پیام.
Binding (ارتباط بین Exchange و Queue)
Binding پلی است که Exchange و Queue را به هم متصل میکند و تعیین میکند که پیامها چگونه از Exchange به صف هدایت شوند. هر Binding میتواند یک Routing Key مشخص داشته باشد که قوانین مسیریابی را تعریف میکند.
Routing Key (کلید مسیریابی)
Routing Key یک رشته است که برای هدایت پیامها به صفهای مناسب توسط Exchange استفاده میشود. در Direct Exchange، پیام فقط به صفهایی ارسال میشود که Routing Key آنها با کلید پیام مطابقت داشته باشد. در Topic Exchange، از Routing Key برای الگوهای پیچیدهتر و هدایت پیامها به چندین صف استفاده میشود.
نمونه جریان پیام
فرض کنید یک Producer پیام ثبت سفارش را با Routing Key به Exchange ارسال میکند. Exchange با توجه به Bindingها تصمیم میگیرد پیام را به صف سفارشهای پردازش شده و یا صف سفارشهای خطا هدایت کند.
Producer ---> Exchange ---> Binding (Routing Key) ---> Queue ---> Consumer
جمعبندی
Queue، Exchange، Binding و Routing Key ستونهای اصلی معماری RabbitMQ هستند. Queue محل ذخیره پیامها است، Exchange پیامها را مسیریابی میکند، Binding قوانین اتصال Exchange و Queue را تعریف میکند و Routing Key کلید هدایت پیام به صف مناسب را مشخص میکند. درک و استفاده صحیح از این مفاهیم، پایه طراحی سیستمهای پایدار و مقیاسپذیر مبتنی بر RabbitMQ است.