
تخيلوا ان عندنا مطعم وشغال فيه اكتر من طباخ بيعملوا اكلات كتيرة ومتنوعة في نفس الوقت, وكل واحد شغال على الطبق اللي بيجهزه, فعشان الطباخين دول يبقى فيه بينهم تناسق وترتيب على حسب الاوردرات لازم يكون فيه نظام بيحققلهم ده فهم بيعملوا ايه ؟
بيحطوا الاوردرات كلها ورا بعض في شكل طابور، وكل طباخ بيلاقي اوردر متاح بياخد الاوردر اللي عليه الدور.
هو ده ببساطة الـ Message Queue
Message Queue
الـ Message Queue هو عبارة عن وسيلة تواصل بين الـ Services وبعضها البعض فيقدروا يتبادلوا المعلومات بشكل Asynchronous
وعشان كده النوع ده من التواصل بنسميه Asynchronous
Communication.
طب يعني ايه Async ؟
💡الـ
Asynchronous
Communication معناه ان الطرفين مش بيتواصلوا مع بعض In Real Time ومش محتاجين الاجابة تحصل بشكل Immediate زي الـ MailBox
فالـ Message Queue بيكون عبارة عن وسيط بين طرفين وبيضمنلك ان الرسالة هيتم استلامها من طرف واستقبالها من الطرف الآخر.
المكونات الأساسية لأي Message Queue
- الـ Producer : وده دوره انه يـ
Create
ويبعت الـMessage
اللي عاوزة تتبعت للـ Message Queue - الـ Message : ودي الحاجة اللي الـ Producer بيبعتها للـ Message Queue عشان الـ Consumer يعملها Processing وممكن يكون ليها اكتر من شكل زي
Data
اوEvent
حصل أوTask
وكلهم عبارة عنMessage
في الأول والآخر .. - الـ Message Queue : وده المكان اللي بتتخزن فيه الـ
Message
لحد ما يتم استلامها وعمل Processing عليها - الـ Consumer : وده دوره انه يستقبل الـ
Message
اللي اتبعتت ويعملها Processing بالشكل المطلوب
فايدة الـ Message Queue ؟
-
الـ Decoupling: وده معناه اني مبخليش الـ Components عندي في الـ System معتمدة على بعضها , ولكن بخليها مستقلة بذاتها وده من خلال اني بفصل الاعتمادية دي واخليهم مثلا يتواصلوا من خلال الـ Message Queue
-
الـ Scalability: فهي بتساعد بشكل كبير في الـ Horizontal Scalability وده من خلال ان لو عندي Workload كبير زي مثال المطعم فانا ممكن اعمل Scale للطباخين ,, وبالتالي يبقى عندي اكتر من طباخ بياخدوا الـ Orders ويعملوا ليها Processing فازود الـ Throughput بتاعي واقدر اتعامل مع عدد كبير من الـ Orders
-
الـ Resiliency: وده معناه ان لو حصل عندي اي خطأ او مشكلة فانا ممكن اعتمد على الـ Message Queue في اني احتفظ بالـ
Message
وارجع اعملها Processing مرة تانية , تخيلوا مثلا واحد من الطباخين وهو بياخد الاوردر جاتله مكالمة طارئة .. فهو ممكن يخلصها ويرجع يكمل الاوردر اللي بيعمله تاني .. حتى لو هيبدا فيها من جديد طالما السلوك ده مقبول بالنسبالي .. او ممكن يسيبه تاني لحد تاني من الطباخين ياخده ويشتغل عليه ..
أشهر تطبيقات الـ Message Queue
- RabbitMQ
- Kafka
- Amazon SQS