اغلب با بزرگتر شدن سیستم و برای جلوگیری از هر گونه شکست، از معماری یکپارچه قدیمی به معماری میکرو سرویس رو میآوریم. با تقسیم برنامه به واحدهای مستقل کوچکتر نیز، تعداد تعامل بین هر واحد به طور قابل توجهی افزایش می یابد.
* صف پیام(Messaging queue) راه دیگری برای برقراری ارتباط و هماهنگی به طور ناهمزمان به ویژه در واحد جدا شده ارائه می دهد و در عین حال عملکرد، قابلیت اطمینان و مقیاس پذیری را بهبود می بخشد.
* مؤلفه ای که پیام را به صف اضافه می کند تولید کننده نامیده می شود و مؤلفه ای که پیام را بازیابی و پردازش می کند مصرف کننده نامیده می شود.
* مصرف کننده و تولیدکننده مستقیماً با هم تعامل ندارند و از کارگزار(broker) به عنوان کسی که معمولاً صف را مدیریت می کند استفاده می کند.
صف پیام به عنوان ارتباط نقطه به نقطه نیز شناخته می شود.
نمونه ای از مبادله نقطه به نقطه در دنیای واقعی می تواند تحویل بسته باشد. تصور کنید که شما 3 محصول را در یک بازار سفارش داده اید و هر یک از آنها توسط فروشنده متفاوتی فروخته می شود. شما انتظار دارید 3 بسته دریافت کنید. این یک ارتباط نقطه به نقطه است زیرا یک پیام (بسته های شما) توسط تولیدکنندگان (فروشندگان) مستقیماً برای یک مصرف کننده خاص (شما) ارسال می شود. البته، این یک مقایسه ابتدایی بود زیرا یک صف پیام می تواند یک یا چند مصرف کننده داشته باشد. در چنین حالتی، کارگزار سعی می کند پیام ها را به طور مساوی بین آنها توزیع کند. تنها تضمین این است که هر پیام منفرد فقط یک بار به یکی از مصرف کنندگان در دسترس تحویل داده می شود.
صف های پیام با دو ویژگی دوام و ماندگاری نیز شناخته می شوند. هنگامی که هیچ مصرف کننده فعالی وجود ندارد، کارگزار پیام ها را قبل از حذف آنها از صف نگه می دارد. به این ترتیب پیام ها بادوام هستند.
اما اگر کارگزار از کار بیفتد و در این مدت دوباره راه اندازی شود، ممکن است پیام های بافر را از حافظه حذف کند. برای جلوگیری از حذف، باید پیام ها را با افزودن آنها به یک فایل لاگ ماندگار حفظ کنیم.
کافکا آپاچی(Apache Kafka) و RabbitMQ نمونههایی از صف پیامرسانی هستند.
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»
[1] https://www.dynatrace.com/news/blog/what-is-a-message-queue/