احتمالا در پروژههای برنامهنویسی به قسمتی رسیدهاید که در آن دو برنامه باید با یکدیگر ارتباط داشته باشند. این ارتباط میتواند ویژگیهای مختلف داشته باشد. مثلا ممکن است ارتباط real-time مدنطر باشد. مثلا مانند زمانی که در لحظه در پروژه نیاز به گرفتن دیتای لحظهای نتایج مسابقات دارید یا موارد مشابه. در شرایط دیگری این ارتباط میتوانند مانند API Call های ساده باشد که منتظر جواب آن نیز هستید. مثلا کلاینت درخواستی را به سرور ارسال میکند و برای مثال میخواهد آیتم جدیدی بسازد و نیاز به تایید از سرور دارد. یا پولی را آنلاین پرداخت میکنید و نیازمند گرفتن کد پیگیری آن هستید.
ارتباط دیگری وجود دارد که بین دو برنامه ایجاد میشود اما نیازی به گرفتن پاسخ آن در لحظه نیست و دو برنامه مستقل از یکدیگر هستند. برای مثال در دنیای واقعی وقتی نامهای ارسال میشود این نامه به اداره پست ارسال میشود. سپس اداره پست پس از اینکه خودش صلاح دید (!) نامهها را به مناطق مشخص میبرد و به دست گیرندههای آن میرساند. گیرندهها نیز از طریق صندوق پستی راه ارتباطی با اداره پست را باز گذاشته اند. در برنامهها نیز ممکن است این مورد پیش بیاید. برای مثال فرض کنید که میخواهید اطلاعاتی را به قسمتی بدهید یا درخواست پردازش اطلاعاتی را به برنامهای بدهید اما دیگر به نتایج آن در لحظه کاری ندارید. میتوانید این درخواست را به یک واسط میانی داده تا این کار را انجام دهد و به گیرنده انتقال دهد. حال ممکن است سوال پیش بیاید که چرا یک واسط میانی باید وجود داشته باشد؟
یکی از دلایل وجود این واسط میانی تبدیل درخواستهای asynchronous به یک صف است. به این صورت که هر برنامهای میتواند به صورت موازی درخواست ایجاد کند و واسط این درخواستها را میگیرد و در یک صف قرار میدهد و به صورت صف آنها را به مقصد مشخص میرساند. با این کار دیگر فرستنده منتظر پاسخ نیست و هر زمان که لازم بداند درخواست را ارسال میکند.
پس اگر بخواهیم تعریفی از message queue داشته باشیم به صورت زیر خواهد بود:
یک message queue یک پروتکل ارتباطی ناهمزمان را ارائه می دهد، که سیستمی است که پیامی را در صف پیام قرار می دهد و نیازی به پاسخ فوری برای ادامه پردازش ندارد.
ایمیل احتمالاً بهترین نمونه از ارتباطات ناهمزمان است. در این ارتباط شما محتوای خود را میفرستید و این محتوا در صف قرار میگیرد و بدون آن که نیازی به نتیجه ارسال آن داشته باشید به ادامه کار خود میپردازید. این محتوا در صف قرار میگیرد و در سریعترین زمان ممکن به گیرنده خود میرسد.
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است