قائمة انتظار الرسائل
في علوم الحاسوب ، تُعدّ قوائم انتظار الرسائل وصناديق البريد مكونات هندسية برمجية تُستخدم عادةً للتواصل بين العمليات (IPC)، أو للتواصل بين الخيوط داخل العملية نفسها. وتستخدم هذه المكونات قائمة انتظار للرسائل - أي لنقل التحكم أو المحتوى. وتوفر أنظمة الاتصال الجماعي وظائف مماثلة.
يُعدّ نموذج قائمة انتظار الرسائل نموذجًا مشابهًا لنموذج الناشر/المشترك ، وهو عادةً جزء من نظام برمجيات وسيطة أكبر موجه نحو الرسائل . تدعم معظم أنظمة المراسلة كلا النموذجين، الناشر/المشترك وقائمة انتظار الرسائل، في واجهة برمجة التطبيقات الخاصة بها ، مثل خدمة رسائل جافا (JMS).
يُمكّن نمط المستهلكين المتنافسين العديد من المستهلكين المتزامنين من معالجة الرسائل في نفس قائمة انتظار الرسائل. [ 1 ]
نطاق الاختصاص والملكية
تُطبّق قوائم انتظار الرسائل نمط اتصال غير متزامن بين عمليتين/خيطين أو أكثر، حيث لا يحتاج الطرف المُرسِل والمُستقبِل إلى التفاعل مع قائمة انتظار الرسائل في الوقت نفسه. تُخزّن الرسائل الموضوعة في قائمة الانتظار حتى يسترجعها المُستقبِل. تفرض قوائم انتظار الرسائل قيودًا ضمنية أو صريحة على حجم البيانات التي يُمكن إرسالها في رسالة واحدة، وعلى عدد الرسائل التي يُمكن أن تبقى معلقة في قائمة الانتظار. [ 2 ]
حوالة مالية
تعمل العديد من تطبيقات قوائم انتظار الرسائل داخليًا ضمن نظام التشغيل أو ضمن التطبيق . وتوجد هذه القوائم لأغراض ذلك النظام فقط. [ 3 ] [ 4 ] [ 5 ]
تتيح تطبيقات أخرى تبادل الرسائل بين أنظمة حاسوبية مختلفة، ما قد يربط بين تطبيقات وأنظمة تشغيل متعددة. [ 6 ] توفر أنظمة قوائم انتظار الرسائل هذه عادةً وظائف مرونة لضمان عدم "فقدان" الرسائل في حال تعطل النظام. من أمثلة التطبيقات التجارية لهذا النوع من برامج قوائم انتظار الرسائل (المعروفة أيضًا باسم البرمجيات الوسيطة الموجهة نحو الرسائل ) IBM MQ (المعروف سابقًا باسم MQ Series) وOracle Advanced Queuing (AQ). يوجد معيار جافا يُسمى خدمة رسائل جافا ، وله العديد من التطبيقات البرمجية الاحتكارية والمجانية .
تشجع أنظمة التشغيل في الوقت الحقيقي (RTOS) مثل VxWorks و QNX استخدام قوائم انتظار الرسائل كآلية أساسية للتواصل بين العمليات أو الخيوط. وهذا يُتيح التكامل بين تمرير الرسائل وجدولة وحدة المعالجة المركزية. ومن الأمثلة المبكرة لأنظمة التشغيل التجارية في الوقت الحقيقي التي شجعت استخدام قوائم انتظار الرسائل للتواصل بين الخيوط، نظاما VRTX و pSOS +، وكلاهما يعود إلى أوائل ثمانينيات القرن الماضي. وتستخدم لغة البرمجة إرلانج العمليات لتوفير التزامن؛ وتتواصل هذه العمليات بشكل غير متزامن باستخدام قوائم انتظار الرسائل.
ملكية
يمكن أن يكون برنامج إدارة قوائم الانتظار إما برنامجًا احتكاريًا أو مفتوح المصدر أو مزيجًا من الاثنين. ويتم تشغيله إما محليًا على خوادم خاصة أو على خوادم سحابية خارجية ( خدمة إدارة قوائم الانتظار ).
- تتمتع الخيارات الاحتكارية بتاريخ طويل، وتشمل منتجات من بدايات تقنية قوائم انتظار الرسائل، مثل IBM MQ ، وتلك المرتبطة بأنظمة تشغيل محددة، مثل Microsoft Message Queuing (MSMQ) . كما يقدم مزودو الخدمات السحابية حلولهم الاحتكارية، مثل Amazon Simple Queue Service (SQS) وStormMQ و Solace و IBM MQ .
- تشمل الخيارات مفتوحة المصدر لأنظمة وسيطة المراسلة Apache ActiveMQ و Apache Kafka و Apache Qpid و Apache RocketMQ و JBoss Messaging و RabbitMQ و Sun Open Message Queue و Tarantool .
ومن الأمثلة على موردي برامج وسيطة المراسلة القائمة على الأجهزة : Solace و Apigee و IBM MQ .
الاستخدام
في تطبيق نموذجي لقوائم انتظار الرسائل، يقوم مسؤول النظام بتثبيت وتكوين برنامج قوائم انتظار الرسائل ( مدير قوائم الانتظار أو وسيط)، ويحدد قائمة انتظار رسائل مُسماة. أو يقوم بالتسجيل لدى خدمة قوائم انتظار الرسائل .
ثم يقوم التطبيق بتسجيل روتين برمجي "يستمع" للرسائل الموضوعة في قائمة الانتظار.
يمكن للتطبيقات الثانية واللاحقة الاتصال بقائمة الانتظار ونقل رسالة إليها.
يقوم برنامج إدارة قائمة الانتظار بتخزين الرسائل حتى يتصل تطبيق مُستقبِل، ثم يستدعي روتين البرنامج المُسجّل. بعد ذلك، يقوم التطبيق المُستقبِل بمعالجة الرسالة بالطريقة المناسبة.
غالباً ما توجد خيارات عديدة فيما يتعلق بالدلالات الدقيقة لتمرير الرسائل، بما في ذلك:
- المتانة - يمكن الاحتفاظ بالرسائل في الذاكرة، أو كتابتها على القرص، أو حتى إرسالها إلى نظام إدارة قواعد البيانات إذا كانت الحاجة إلى الموثوقية تشير إلى حل أكثر كثافة في الموارد.
- سياسات الأمان - ما هي التطبيقات التي ينبغي أن يكون لها حق الوصول إلى هذه الرسائل؟
- سياسات حذف الرسائل - قد يكون للقوائم أو الرسائل " مدة صلاحية ".
- تصفية الرسائل - تدعم بعض الأنظمة تصفية البيانات بحيث لا يرى المشترك إلا الرسائل التي تتطابق مع بعض المعايير المحددة مسبقًا.
- سياسات التسليم - هل نحتاج إلى ضمان تسليم الرسالة مرة واحدة على الأقل، أم مرة واحدة فقط؟
- سياسات التوجيه - في نظام يحتوي على العديد من خوادم قائمة الانتظار، ما هي الخوادم التي يجب أن تتلقى رسالة أو رسائل قائمة الانتظار؟
- سياسات التجميع – هل يجب تسليم الرسائل على الفور؟ أم يجب على النظام الانتظار قليلاً ومحاولة تسليم العديد من الرسائل دفعة واحدة؟
- معايير الترتيب في قائمة الانتظار – متى تُعتبر الرسالة "مُدرجة في قائمة الانتظار"؟ هل عندما تكون موجودة في قائمة انتظار واحدة؟ أم عندما يتم توجيهها إلى قائمة انتظار واحدة على الأقل بعيدة؟ أم إلى جميع قوائم الانتظار؟
- إشعار الاستلام - قد يحتاج الناشر إلى معرفة متى تلقى بعض المشتركين أو جميعهم رسالة.
هذه كلها اعتبارات يمكن أن يكون لها تأثيرات كبيرة على دلالات المعاملات، وموثوقية النظام، وكفاءة النظام.
المعايير والبروتوكولات
تاريخياً، استخدمت أنظمة قوائم انتظار الرسائل بروتوكولات مغلقة خاصة، مما يحد من قدرة أنظمة التشغيل أو لغات البرمجة المختلفة على التفاعل في مجموعة غير متجانسة من البيئات.
كانت مواصفات JMS من شركة صن مايكروسيستمز محاولة مبكرة لجعل نظام إدارة الرسائل أكثر انتشارًا، حيث وفرت تجريدًا خاصًا بلغة جافا لواجهة برمجة تطبيقات العميل . وقد سمح هذا لمطوري جافا بالتبديل بين مزودي خدمات إدارة الرسائل بطريقة مشابهة لتلك التي يستخدمها مطورو قواعد بيانات SQL . عمليًا، ونظرًا لتنوع تقنيات وسيناريوهات إدارة الرسائل، لم يكن هذا الأمر عمليًا دائمًا كما ينبغي.
ظهرت ثلاثة معايير تُستخدم في تطبيقات قوائم انتظار الرسائل مفتوحة المصدر:
- بروتوكول قوائم انتظار الرسائل المتقدمة (AMQP) - بروتوكول قوائم انتظار رسائل غني بالميزات، معتمد كمعيار ISO/IEC 19464 منذ أبريل 2014
- بروتوكول المراسلة النصية المتدفقة (STOMP) – بروتوكول مراسلة نصي بسيط
- بروتوكول MQTT (المعروف سابقًا باسم MQ Telemetry Transport) – بروتوكول خفيف الوزن لقوائم الرسائل، مصمم خصيصًا للأجهزة المدمجة
تختلف هذه البروتوكولات في مراحل توحيدها واعتمادها. يعمل البروتوكولان الأولان على نفس مستوى بروتوكول HTTP ، بينما يعمل بروتوكول MQTT على مستوى بروتوكول TCP/IP .
تستخدم بعض التطبيقات الاحتكارية بروتوكول HTTP لتوفير خدمة قوائم انتظار الرسائل، مثل خدمة SQS من أمازون . ويعود ذلك إلى إمكانية دمج السلوك غير المتزامن (وهو المطلوب لقوائم انتظار الرسائل) مع بروتوكول متزامن باستخدام دلالات الطلب والاستجابة. مع ذلك، فإن هذه التطبيقات مقيدة بالبروتوكول الأساسي في هذه الحالة، وقد لا تتمكن من توفير الدقة الكاملة أو مجموعة الخيارات المطلوبة في تمرير الرسائل.
متزامن مقابل غير متزامن
تعتمد العديد من بروتوكولات الاتصالات الأكثر شيوعًا على العمل المتزامن . ويُعد بروتوكول HTTP - المستخدم في شبكة الإنترنت العالمية وخدمات الويب - مثالًا واضحًا على ذلك، حيث يرسل المستخدم طلبًا لصفحة ويب ثم ينتظر الرد.
مع ذلك، توجد حالات لا يكون فيها السلوك المتزامن مناسبًا. على سبيل المثال، يمكن استخدام تقنية AJAX ( جافا سكريبت غير المتزامنة و XML ) لإرسال نصوص أو رسائل JSON أو XML بشكل غير متزامن لتحديث جزء من صفحة ويب بمعلومات أكثر صلة. تستخدم جوجل هذا الأسلوب في ميزة "اقتراحات جوجل"، وهي ميزة بحث ترسل استعلامات المستخدم المكتوبة جزئيًا إلى خوادم جوجل، ثم تُعيد قائمة بالاستعلامات الكاملة المحتملة التي قد تهم المستخدم أثناء كتابتها. ويتم تحديث هذه القائمة بشكل غير متزامن أثناء كتابة المستخدم.
توجد أمثلة أخرى غير متزامنة في أنظمة إشعارات الأحداث وأنظمة النشر/الاشتراك .
- قد يحتاج تطبيق ما إلى إخطار تطبيق آخر بوقوع حدث ما، ولكنه ليس بحاجة إلى انتظار رد.
- في أنظمة النشر/الاشتراك، يقوم التطبيق "بنشر" المعلومات ليقرأها أي عدد من العملاء.
في كلا المثالين أعلاه، لن يكون من المنطقي أن ينتظر مرسل المعلومات إذا، على سبيل المثال، تعطل أحد المستلمين.
لا يشترط أن تكون التطبيقات متزامنة أو غير متزامنة بشكل حصري. قد يحتاج تطبيق تفاعلي إلى الاستجابة لأجزاء معينة من الطلب فورًا (مثل إبلاغ العميل بقبول طلب مبيعات، والتعامل مع وعد السحب من المخزون)، ولكنه قد يؤجل أجزاء أخرى (مثل إكمال حساب الفواتير، وإرسال البيانات إلى نظام المحاسبة المركزي، واستدعاء أنواع أخرى من الخدمات) لإنجازها في وقت لاحق.
في جميع هذه الأنواع من المواقف، يمكن أن يساعد وجود نظام فرعي يقوم بتخزين الرسائل في قائمة الانتظار (أو بدلاً من ذلك، نظام إرسال الرسائل) في تحسين سلوك النظام ككل.
التنفيذ في نظام يونكس
يوجد نوعان شائعان من تطبيقات قوائم انتظار الرسائل في نظام يونكس . أحدهما جزء من واجهة برمجة تطبيقات SYS V، والآخر جزء من نظام POSIX .
SYS V
يُطبّق نظام UNIX SYS V خاصية تمرير الرسائل من خلال الاحتفاظ بمصفوفة من القوائم المتصلة كطوابير رسائل. يُعرَّف كل طابور رسائل بفهرسه في المصفوفة، وله مُعرِّف فريد. يمكن أن يكون للفهرس الواحد عدة مُعرِّفات مُحتملة. يوفر نظام UNIX دوالًا قياسية للوصول إلى خاصية تمرير الرسائل. [ 7 ]
msgget()- يستدعي هذا النظام مفتاحًا كمعامل، ويعيد وصفًا لقائمة الانتظار التي تحتوي على المفتاح المطابق إن وُجدت. أما إذا لم تكن موجودة، وتم
IPC_CREATضبط العلامة، فإنه يُنشئ قائمة انتظار رسائل جديدة بالمفتاح المُعطى، ويعيد وصفها. msgrcv()- تُستخدم هذه العملية لاستقبال رسالة من مُعرِّف قائمة انتظار مُحدَّد. يجب أن يمتلك المُستدعي أذونات قراءة لقائمة الانتظار. وهي من نوعين. [ 8 ]
- يؤدي حظر الاستقبال إلى وضع العملية الفرعية في حالة سكون إذا لم تتمكن من العثور على نوع الرسالة المطلوب. وتبقى في حالة سكون حتى يتم إرسال رسالة أخرى إلى قائمة الانتظار، ثم تستيقظ للتحقق مرة أخرى.
- يعود الاستقبال غير المحظور فوراً إلى المتصل، مع الإشارة إلى أنه فشل.
msgctl()- يُستخدم هذا الأمر لتغيير معلمات قائمة انتظار الرسائل، مثل مالكها. والأهم من ذلك، أنه يُستخدم لحذف قائمة انتظار الرسائل بتمرير
IPC_RMIDعلامة معينة. ولا يمكن حذف قائمة انتظار الرسائل إلا من قِبل مُنشئها أو مالكها أو المستخدم المتميز.
بوسيكس
تُعدّ واجهة برمجة تطبيقات قوائم انتظار الرسائل POSIX.1-2001 أحدث واجهتي برمجة تطبيقات قوائم انتظار الرسائل في نظام يونكس. وهي تختلف عن واجهة برمجة تطبيقات SYS V، ولكنها تُقدّم وظائف مُشابهة. mq_overview(7)تُقدّم صفحة دليل يونكس نظرة عامة على قوائم انتظار الرسائل POSIX.
واجهات المستخدم الرسومية
تستخدم واجهات المستخدم الرسومية (GUIs) قائمة انتظار الرسائل، والتي تُسمى أيضًا قائمة انتظار الأحداث أو قائمة انتظار الإدخال ، لتمرير إجراءات الإدخال الرسومية ، مثل نقرات الماوس أو أحداث لوحة المفاتيح أو غيرها من مدخلات المستخدم، إلى برنامج التطبيق . [ 9 ] يضع نظام النوافذ الرسائل التي تشير إلى أحداث المستخدم أو غيرها، مثل نبضات المؤقت أو الرسائل المرسلة من سلاسل عمليات أخرى، في قائمة انتظار الرسائل. يقوم تطبيق واجهة المستخدم الرسومية بإزالة هذه الأحداث واحدًا تلو الآخر عن طريق استدعاء روتين يُسمى getNextEvent()أو ما شابهه في حلقة أحداث ، ثم استدعاء روتين التطبيق المناسب لمعالجة ذلك الحدث. [ 10 ]
انظر أيضاً
- بروتوكول قوائم انتظار الرسائل المتقدمة (AMQP)
- خدمة أمازون البسيطة للطوابير
- أباتشي أكتيف إم كيو
- أباتشي كيوبيد
- كرفس (برنامج)
- جيرمان
- ناقل تكامل IBM
- IBM MQ
- خدمة رسائل جافا
- MQTT
- البرمجيات الوسيطة الموجهة نحو الرسائل (فئة)
- خدمة قوائم انتظار الرسائل من مايكروسوفت (المعروفة بالعامية باسم MSMQ)
- ناتس
- خدمة أوراكل للمراسلة السحابية
- RabbitMQ
- ريدي
- خدمة رسائل المؤسسات من TIBCO
- ZeroMQ
مراجع
- ↑ غورتون، إيان (2022). أسس الأنظمة القابلة للتوسع . دار نشر أورايلي. رقم ISBN 9781098106034.
- ↑ تعمّق في وحدة Queue في بايثون. نظرة عامة على قوائم انتظار رسائل POSIX
- ↑ قوائم انتظار رسائل نظام Win32. "حول الرسائل وقوائم انتظار الرسائل" . واجهة مستخدم ويندوز . شبكة مطوري مايكروسوفت. مؤرشف من الأصل في 17 مارس 2012. تم الاطلاع عليه في 21 أبريل 2010 .
- ↑ لينكس وقوائم انتظار الرسائل POSIX. نظرة عامة على قوائم انتظار الرسائل POSIX. مؤرشف بتاريخ 4 مايو 2012 على موقع Wayback Machine على الرابط linux.die.net
- ↑ استخدام قوائم انتظار الرسائل في لينكس. وظائف قوائم انتظار الرسائل في لينكس. مؤرشفة بتاريخ 8 أبريل 2012 على موقع Wayback Machine على الرابط www.civilized.com
- ↑ على سبيل المثال، منتج MSMQ. "نظام إدارة قوائم الانتظار للرسائل (MSMQ)" . اتصالات الشبكة . شبكة مطوري مايكروسوفت . تم الاطلاع عليه في 9 مايو 2009 .
- ↑ باخ، إم جيه (1986). تصميم نظام التشغيل يونكس . برنتيس هول. ISBN 9780132017992.
- ↑ أبراهام سيلبرشاتز، بيتر ب. جالفين (1994). مفاهيم أنظمة التشغيل . أديسون-ويسلي. ISBN 9780201504804.
- ↑ كارترايت، كوركي. "برمجة واجهة المستخدم الرسومية" . جامعة رايس: روبرت (كوركي) كارترايت . تم الاطلاع عليه بتاريخ 27 يونيو 2020 .
- ↑ نيستروم، روبرت (2014). أنماط برمجة الألعاب . جينيفر بينينغ. ISBN 978-0990582908تم الاطلاع عليه بتاريخ 27 يونيو 2020 .
- التواصل بين العمليات
- الأحداث (الحوسبة)
- إدارة الطوابير
