در قسمت قبل در مورد اینکه سیستم انتقال پیام چیست و چگونه کار میکند صحبت کردیم. در این مطلب مطالب در مورد rabbitMQ را ادامه به توضیح Exchange ها می پردازیم.
پیامها به صورت مستقیم به صف مورد نظر منتشر نمیشوند بلکه producer پیامها را به یک exchange تحویل می دهد. وظیفه exchange هدایت پیامها به صف ها است. Exchange این کار را با استفاده از کلید های مسیریابی و لینک هایی که با صف ها دارد انجام میدهد.
پروتکل انتقال پیامها در سیستمهایی مانند RabbitMQ پروتکل AMQP است که مخفف Advanced Message Queuing Protocol میباشد.
1. producer یک پیام را به یک exchange میفرستد.
۲. exchange پیام را دریافت میکند و با توجه به کلید مسیریابی و خصوصیات پیام و binding هایی که دارد تصمیم میگیرد که پیام در کدام صف قرار بگیرد. دقت کنید که binding ها همان قوانینی هستند که exchange از آنها استفاده میکند تا به یک صف متصل شود.
3.پیام ها در داخل صف باقی میمانند تا وقتی که یک consumer بیاید و آنها را از روی صف بردارد.
4. consume پیام را از روی صف برداشته و شروع به پردازش می کند.
در تصویر زیر این مراحل را مشاهده می کنید.
اینکه یک پیام به کدام صف هدایت شود را نوع exchange و binding مشخص می کند. در نسخه AMQP 0-9-1 انواع exchange ها 4 دسته هستند که عبارتند از
هرکدام از انواع exchange ها خصوصیاتی مانند نام و durability(اگر سیستم ریستارت exchange باقی بماند یا خیر) , auto-delete (وقتی که همه صف هایی که exchange استفاده میکرد تمام شوند exchange حذف شود یا خیر) نیز دارند.
یک exchange از نوع direct است که هیچ اسمی ندارد و توسط سیستم ساخته شده است. خاصیتی که این exchange دارد این است که در برنامههای ساده هر صفی که ساخته میشود به این exchange اختصاص داده میشود و کلید مسیریابی آن نام همان صف است. یعنی اگر ما یک صف بسازیم به نام createPdf این صف به exchange پیشفرض وصل شده و نام کلید مسیریابی آن createPdf خواهد بود. حال هرگاه خواستیم که پیامی به صف تولید pdf برود فقط کافی است که نام کلید آن را createPdf قرار دهیم.
یک exchange مسقتیم پیامها را به صف هایی میرساند که دقیقاً مطابق با کلید مسیریابی پیام است. یعنی کلید را بررسی میکند و پیام را صفی که آن کلید مربوط به آن است ارسال می کند. این نوع exchange برای پیامهای unicast که یک مقصد و صف دارند عالی است. هرچند که میتوان با کمک آن پیام multicast هم ارسال کرد. از این نوع exchange بیشتر برای توزیع task ها بین چند سیستم هم انجام می شود. تصویر زیر این exchange را نمایش می دهد.
این نوع exchange کاری به کلید مسیریابی ندارد و پیامها را برای همه صف ها ارسال می کند. اگر تعداد N صف به یک Fanout exchange وصل شده باشند وقتی که یک پیام تولید میشود exchange یک کپی از پیام برای همه صف ها می فرستد. به همین خاطر این exchange برای ارسال پیامهای broadcast بسیار مناسب است. تصویر این exchange در شکل زیر آمده است.
این Exchange پیامها را به یک یا چند صف میفرستد. نحوه تصمیم گیری برای اینکه پیام را به کدام صف ارسال کند بستگی به کلید مسیریابی و همچنین الگویی است که صف را به Exchange متصل می کند. این نوع Exchange برای پیادهسازی الگوهای publish/subscribe مناسب است. همچنین این نوع Exchange برای مسیریابی های multicast پیامها مناسب است. حالتی را تصور کنید که برای یک پیام چندین مصرف کننده وجود دارد که میتوان انتخاب کرد که پیام را به کدام داد، برای این کار از این الگو استفاده می شود.
این نوع Exchange با توجه به header پیام تصمیم میگیرد که پیام را در کدام صف قرار دهد. این Exchange توجه زیادی به کلید مسیریابی ندارد و بیشتر به اطلاعات header تمرکز دارد. این Exchange شبیه به Direct Exchange است با این تفاوت که به جای توجه کردن به کلید مسیریابی از اطلاعات header پیام استفاده می کند.
با وب سایت Tosinso همراه باشید.
بنیانگذار توسینسو و برنامه نویس
مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود