صف پیام، راه حلی برای ارتباط از طریق سرویس بین برنامه های کاربردی است صرف نظر از این که هر برنامه یا داده های مربوط به آن در چه محیطی عملیاتی شده اند. به عنوان مثال راه ارتباطی بین برنامه هایی که روی یک سرور قرار دارند، روی سرورهای مختلف توزیع شده ولی با معماری یکسان و یا حتی روی سرورهای متفاوت با الگوهای معماری متفاوت هستند، می تواند باشد. در این مکانیزم، پیام ها در صف هایی ارسال و دریافت می شوند. صف پیام یک لایه ارتباطی برای انتقال پیام بین برنامه های مختلف ایجاد می کند که در طول انتقال پیام محتوای داخل آن مشخص نیست و زمانی که هر پیام به مقصد رسید، گیرنده از آن برای ارتباط با لایه بیزینس، دیتابیس و غیره می تواند استفاده کند. صف پیام برای انتقال پیام ها از API هایی استفاده می کند که قابلیت تعامل بین برنامه های کاربردی مختلف با زبان های برنامه نویسی مختلف و در پلتفرم های مختلف را دارد.
کاربرد اصلی صف پیام را می توان زمانی در نظر گرفت که نرخ ارسال اطلاعات از سمت تولید کننده پیام با نرخ دریاف پیام در سمت مصرف کننده یکسان نباشد، پس به یک میانجی نیاز است تا این حجم پیام های ورودی را به صورت توزیع شده در اختیار مصرف کننده قرار دهد تا هم سرعت پردازش بالا رود و هم حجم داده ورودی به سمت مصرف کننده کاهش پیدا کند.
اما در ادامه ابزارهای message broker معرفی شدند که به منظور هدایت پیام ها، از محتوای داخل هر پیام نیز مطلع هستند و برای هر پیامی با توجه به محتوای آن می توانند، عملیاتی مختص به آن را تعریف کنند. منبع این پیام ها می تواند انواع مختلفی داشته باشد، مثلا java message services (jms) یا فایل های متنی و غیره. این عملکرد، به منزله ی ایجاد یک مسیر مجزا بین مبدا و مقصد هر پیام بر حسب محتوای آن می باشد.
در غالب سیستم های نرم افزاری امروزی، معماری برنامه ها به گونه است که هر بخش به صورت واحدهای جداگانه و مستقل طراحی، پیاده سازی و عملیاتی می شود و ارتباط و ارسال پیام بین هر کدام از این واحد ها به صورت ناهمگام توسط صف پیام صورت می گیرد. این پیام ها معمولا سبک هستند؛ مثلا درخواست ارسال شده و پاسخ دریافت شده از یک سرویس یا متن خطایی که رخ داده است. برای ارسال پیام، تولید کننده، پیام را به صف میفرستد و این پیام تا زمانی که مصرف کننده از سر صف پیام ها را بردارد و نوبت به آن برسد، در صف باقی می ماند.
ActiveMQ
یک پروتکل متن باز به زبان جاوا است که توسط آپاچی به عنوان یک میان افزار برای ارسال پیام، توسعه داده شده است و از قالب های مختلف پیام مثل JMS پشتیبانی می کند. activeMQ می تواند همزمان چند کلاینت و سرور را به هم متصل کند تا به صورت همزمان به یکدیگر پیام ارسال کنند. حتی اگر یک برنامه به طور موقت از کار بیفتد، پیام رسانی همچنان به طور موازی انجام خواهد شد و مثلا پیام خطا از سمت آن دریافت می شود.
Kafka
یک پلتفرم متن باز است که توسط لینکداین به زبان اسکالا و جاوا توسعه داده شده و سپس در اختیار آپاچی قرار گرفته است. kafka مزایایی دارد از جمله:
https://www.extrahop.com/resources/protocols/activemq/
http://javaresolutions.blogspot.com/2014/08/messagequeue-vs-message-broker.html
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»