RabbitMQ

سلام به همه ی موقشنگای برنامه نویس امیدوارم که حال دلتون خوب و لبتون خندون باشهامروز که نه امشب میخوام براتون راجب RabbitMQ و روش یا انواع استفادش بنویسم امیدوارم که بهتون کمک کنه.خوب بچه ها RabbitMQ یک سیستم مسیجینگه که میتونه هم مسیج دریافت و هم ارسال کنه و به شما این تضمین رو بده که پیام های شما ارسال میشه.اگر بخوام براتون به یه چیزی تشبیه کنمش دقیقا شبیه یه شرکت پست هست که به شما این تضمین رو میده که آقا حضرت عباسی من همه ی بسته هاتو قول میدم توی کمترین زمان برسونم ما هم میگیم دمت گرم.تنها تفاوت اینه که اینجا دیگه با بسته ی پستی سروکار نداریم بلکه با مسیج و پیام سروکار داریم.قرارداد: بچه ها اینجا به کسی که پیام رو ارسال میکنه producer و به کسی که پیام رو دریافت میکنه یا گوش میده که پیام چی میاد consumer میگن.خوب بیام راجب مفاهیم و انواع استفاده.Work queuesتوی این مفهموم ربیت میاد میگه producer من میتونه تسک هاشو بین consumer های متفاوت تقسیم کنه و هر تسک دقیقا به یکیشون اساین بشه یعنی همزمان روی یه تسک دوتا ورکر کار نمیکنن و میاد تضمین میده اگر یکی از اینا loss بشه تسکشو ربیت میره میده به یه consumer دیگه انجام بده.این تقسیم تسک هارو جالبه بدونید با الگوریتم معروف round-Robin انجام میده یعنی میره سمت consumer میگه داداش وضعیتت چطوره میگه ناموساااا سرم شلوغه میگه اوکی میره بعدی میگه تو چی میگه نه من اوکیم اینجا میگه پس بیا این تسک دست تو باشه یه معرفت بزار زمین انجامش بده.ببینید دستتمون هم باز میزاره میتونید بش بگین به هر consumer فقط یه تسک اساین کن یا کلا فقط به دوتا شون تسک اساین کن و بقیه رو خلوت نگهدار.Publish/Subscribeتوی این مفهوم اتفاقی که میوفته پیام ها توسط producer به تمام consumer ها ارسال عمومی میشه و صف ارسال بعد از عملیات پاک میشه.این کار به کمک exchange از نوع fanout انجام میشه.یه ارتباط اکتیوی بین producer و exchange ایجاد میشه که بهش میگن binding (در واقع بش نخ میده مخشو میزنه اوکی میشه(((((: خدا نصیب همه ی سینگلا این ارتباط بایند رو کنه )Routingتوی این مفهوم ربیت میگه آقا هر مسیج رو براش یه binding-key مشخص کن من با همون ارسال میکنم حالا هر consumer که routing-key با این کلید بایندینگ یکی بود میتونه مسیج رو دریافت کنه.توی اینجا exchange که به ما کمک میکنه از نوع direct هست.Topicsخوب توی این قسمت exchange از نوع topic به ما کمک میکنه مسیج های ارسال شده از سمت producer رو تایتل گذاری یا تاپیک بندی کنیم و بگیم این مسیجی که داره میاد شامل لاگ سرعت و رنگ و نژاد یه هاپو هستش بعد بیام داخل consumer بگیم مثلا اونی که فقط مثلا سرعت و نژاد رو داره من میخوام یا همشو بده و یا ...این نام گذاری یه پترن خاصی داره که میتونید توی لینکی که توی تایتل همینجاس ورش دارین.Remote procedure call (RPC)فکر کنید ما میخوایم یک مسیج رو بفرستیم و صبر کنیم تا جوابشم به ما داده بشه اینجا میتونیم از RPC استفاده کنیم .هر مسیجی هم توی اینجا یک correlationID داره که بفهمیم کدوم جواب مال کدوم درخواسته.خیلی شبیه http هست که هر ریکوست یه ریسپانس هم داره حتی مثله اون contentType هم داره.Publisher Confirmsبچه ها اینجا ریبیت یه کار باحال میکنه میگه وقتی یه چیزی ارسال کردی صبر کن من با یه فلگ یا پرچم بهت بگم که پیامت با موفقیت ارسال شده یا نه و این کارو سینک انجام میده پس اینجا سرعت ما کم میشه اما من یه جا خوندم جدیدا این کارو با فیوچر ها انجام میده که شما معطل نبونید رد شین و یه ترد مثلا بزارین ببینید اصلا فلگ چی میشه.امیدوارم این مطلب مختصر براتون مفید باشه خوشحال میشم اگر جایی اشتباه گفتم بهم متذکر بشین تا سریع ریفکتور و تصحیحش کنم.خدا ایشاالله حالتون رو بپرسه ((((: