اگر هنوز بخش اول یعنی آشنایی با ربیت رو مطالعه نکردید حتما سری به مقاله آشنایی با rabbitmq بزنید و با آمادگی برگردید تا باهم بریم جلو !
قبلا گفتیم که ربیت دیتا هارو با استفاده از exchange ها تا صف مقصد مسیر یابی میکنه.
ما چند نوع exchnage در ربیت داریم که با توجه به پیام ارسالی انتخاب میکنیم که از کدوم استفاده کنیم.
فرق exchange ها با هم فقط در نحوهی مسیربابی هستش.
نوع اول Direct :
در همه پیام هایی که ارسال میکنیم یک routing key برای مسیریابی ارسال میشه و همینطور تمامی صف ها دارای یک binding key هستند.
زمانی که ما از نوع direct برای ارسال پیام استفاده میکنیم باید دقیقا routing key موجود در پیام و binding key صف باهم یکی و برابر باشند.
خوبه که بدونید این نوع از exchange ها یعنی نوع دایرکت به صورت پیشفرض استفاده میشه مگر اینکه شما نوع exchange را تغییر بدهید.
دایرکت برای پیام های نوع unicast ( ارتباط یک به یک ) بهترین انتخاب هست.
نوع دوم Topic :
در اینجا هم برای مسیریابی از routing key و binding key استفاده میشه فقط با این تفاوت که در نوع قبلی ما به این کلید ها به چشم یک string نگاه میکردیم و میگفتیم باید یکسان باشن ، اما اینجا به چشم یک الگو یا پترن در نظر میگیریم مثلا
tv.series
tv.movies
هر دو یک الگو هستند که کلمات با استفاده از . جدا میشن ، یا مثلا * به معنی وجود یک کلمه ( مثل regex بهش نگاه کنین ) و همینطور # به معنی هیچی!
تو نوع تاپیک پترن های کلید هامون رو باهم چک میکنه و اگه match بشن پیام رو به صف مورد نظر ارسال میکنه.
برای پیام های نوع multicast ( پیام هایی که یک فرستنده و چند گیرنده دارند ) مناسبه.
نوع سوم Fanout :
یک کپی از پیام رو برای همهی صف ها ارسال میکنه. فرض کنید در یک مجموعهی بزرگ مدیر هستید و میخواهید بخشنامه جدید رو برای همهی واحد ها در تمامی شهر ها ارسال کنید. و یا در یک شرکت برنامه نویسی میخواهید یک دیتای مشابه رو برای چند گروه کدنویسی برای پردازش های مختلف ارسال کنید. در این صورت از این exchnage استفاده میکنید.
برای مسیریابی های broadcast ( ارتباط یک به همه ) مناسب هستش.
نوع چهارم Headers :
د شبیه نوع اول یعنی دایرکت هستش فقط با این تفاوت که میاد از attrs های موجود در در header پیام به جای routing key استفاده میکنه.
در مورد چهار نوع اصلی exchang های ربیت صحبت کردیم.
در آخر اضافه کنم ، تمامی exchange ها دو قابلیت وجود داره که در مورد پایداری صف ( صفی که exchange کانکت شده ) و وضعیت صف بعد از خالی شدن هستش.
قابلیت اول : durable یا transient ؟
اگر بخواهیم صف بادوام باشه یعنی دیتا های موجود در دیسک ذخیره بشه از قابلیت durable استفاده میکنیم. در این صورت اگر سرویس ربیت ما reset بشن اطلاعات از بین نمیرن.
در مقابل اگر بخواهیم صف نا پایدار باشه و ذخیره داده ها روی حافظه انجام بشه ، از transient استفاده میکنیم که اگر سرویس reset بشه داده ها پاک میشن.
دومین قابلیت : autodelete
وقتی برای auto delete مقدار true قرار بدیم ، صفمون رو بعد از خالی شدن پاک میکنه و برای دفعه بعدی دوباره باید صف رو تعریف کنیم، در غیر این صورت باید مقدار false براش تعریف کنیم.
گرد آورنده : محمد جواد احمدی
استاد : دکتر مریم حاجی اسمعیلی ، دکترای علوم کامپیوتر از دانشگاه کینگستون لندن
Dr.Maryam Hajiesmaeili
PhD of computer science from Kingston university of London