MQTT في فقرة واحدة
MQTT (واسمه الأصلي MQ Telemetry Transport) بروتوكول مراسلة مفتوح وخفيف يعتمد نموذج النشر والاشتراك (Publish/Subscribe) ويعمل فوق TCP/IP. صُمّم للأجهزة محدودة القدرة المعالجة وللشبكات ذات النطاق الترددي المنخفض أو التأخير العالي أو الاتصال غير المستقر. بفضل صغر حجم حزمه وبساطة تطبيقه وكفاءته في استهلاك البطارية والبيانات، أصبح البروتوكول الأكثر استخداماً في إنترنت الأشياء (IoT) والتواصل بين الآلات (M2M).
يُعدّ MQTT معياراً رسمياً من منظمة OASIS، ومنشوراً أيضاً كمعيار دولي برقم ISO/IEC 20922.
كيف يعمل النشر والاشتراك
في نموذج العميل والخادم التقليدي يتواصل كل عميل مباشرة مع الخادم الذي يحتاجه. أما MQTT فيعتمد نموذجاً مختلفاً: العملاء لا يتواصلون مع بعضهم مباشرة، بل يتصل كل عميل بخادم مركزي يسمى البروكر (Broker).
- الناشر (Publisher) يرسل رسالة إلى Topic مسمّى، مثل
home/livingroom/temperature. - المشترك (Subscriber) يخبر البروكر بالـ Topics التي يهتم بها.
- البروكر يستقبل كل رسالة ويعيد توجيهها إلى جميع العملاء المشتركين في ذلك الـ Topic.
لا يحتاج الناشرون والمشتركون إلى معرفة بعضهم، ويمكن إضافتهم أو إزالتهم دون تغيير بقية النظام. ويمكن للعميل الواحد أن يكون ناشراً ومشتركاً في الوقت نفسه.
الـ Topics والرموز الشاملة
الـ Topic نص بترميز UTF-8 يتكون من مستويات تفصل بينها الشرطة المائلة /. تُنشأ الـ Topics تلقائياً عند استخدامها دون حاجة لتسجيلها مسبقاً. يُفضّل أن تتدرج من العام إلى الخاص:
farm/greenhouse-1/soil/moisture
يمكن للمشتركين استخدام رمزين شاملين لاستقبال رسائل من عدة Topics دفعة واحدة:
| الرمز | المعنى | مثال | يطابق |
|---|---|---|---|
+ | مستوى واحد بالضبط | home/+/temperature | home/kitchen/temperature، home/bedroom/temperature |
# | أي عدد من المستويات (يجب أن يكون في النهاية) | home/# | home/kitchen/temperature، home/door/front |
أفضل الممارسات: لا تبدأ الـ Topic بالرمز /، وتجنب المسافات والرموز الخاصة، واجعل الأسماء قصيرة وواضحة، وأضف معرّف الجهاز أو الموقع لتسهيل التصفية. الـ Topics التي تبدأ بالرمز $ (مثل $SYS/) محجوزة لمعلومات البروكر.
جودة الخدمة (QoS)
يحدد MQTT ثلاثة مستويات لضمان التسليم، يختارها الناشر لكل رسالة ويختارها المشترك لكل اشتراك.
| المستوى | الضمان | الأنسب لـ |
|---|---|---|
| QoS 0 | مرة واحدة على الأكثر — تُرسل الرسالة مرة واحدة دون تأكيد استلام. | قراءات الحساسات المتكررة التي لا يضر فقدان إحداها. |
| QoS 1 | مرة واحدة على الأقل — يُعاد الإرسال حتى يصل التأكيد، وقد تتكرر الرسالة. | معظم التطبيقات: التنبيهات وتحديثات الحالة والأوامر التي لا يضر تكرارها. |
| QoS 2 | مرة واحدة بالضبط — مصافحة من أربع خطوات تضمن التسليم مرة واحدة. | العمليات الحساسة مثل الفوترة أو الأوامر التي يجب ألا تتكرر أبداً. |
المستويات الأعلى تزيد حركة البيانات على الشبكة، لذا اختر أقل مستوى يلبي احتياجك. يدعم MQTT One المستويات الثلاثة.
مزايا أساسية يجب معرفتها
الرسائل المحفوظة (Retained)
عند نشر رسالة مع خيار retain، يحتفظ البروكر بآخر رسالة على ذلك الـ Topic ويرسلها فوراً لأي مشترك جديد. هذا مثالي للحالات مثل "الإضاءة تعمل" أو آخر قراءة معروفة للحساس.
رسالة الوصية (Last Will and Testament)
يمكن للعميل عند الاتصال تسجيل رسالة "وصية". إذا انقطع اتصاله بشكل مفاجئ — بسبب انقطاع الكهرباء مثلاً — ينشر البروكر هذه الرسالة نيابة عنه، فيعلم بقية العملاء أن الجهاز أصبح غير متصل.
إبقاء الاتصال (Keep Alive)
يتبادل العميل والبروكر حزم ping صغيرة لاكتشاف الاتصالات المقطوعة حتى عند عدم إرسال بيانات. القيمة المعتادة بين 30 و60 ثانية.
الجلسات الدائمة (Persistent Sessions)
العميل الذي يتصل بجلسة دائمة (clean session = false) ومعرّف عميل ثابت يمكنه استقبال رسائل QoS 1 و2 التي فاتته أثناء انقطاعه.
الأمان
يوفر MQTT عدة طبقات من الأمان:
- المصادقة باسم مستخدم وكلمة مرور تُرسل في حزمة CONNECT.
- التفويض عبر قواعد صلاحيات (ACL) تحدد الـ Topics التي يمكن للمستخدم النشر عليها أو الاشتراك فيها.
- التشفير عبر TLS — المنفذ القياسي
8883، أو WebSocket الآمن للمتصفحات.
استخدم TLS دائماً عندما تمر بياناتك عبر شبكات عامة، وامنح كل جهاز بيانات دخول خاصة به، ولا تضع كلمات المرور في كود منشور للعامة.
إصدارات MQTT
| الإصدار | السنة | أبرز ما فيه |
|---|---|---|
| MQTT 3.1 | 2010 | مواصفات منشورة علناً ومجانية الترخيص. |
| MQTT 3.1.1 | 2014 | معيار OASIS، ثم ISO/IEC 20922. الإصدار الأوسع دعماً اليوم. |
| MQTT 5.0 | 2019 | رموز الأسباب، وخصائص المستخدم، والاشتراكات المشتركة، وانتهاء صلاحية الرسائل، والأسماء المستعارة للـ Topics، ونمط الطلب والرد. |
يدعم MQTT One الإصدارين 3.1 و3.1.1، وتدعمهما جميع مكتبات العملاء الشائعة.
المنافذ القياسية
سجّلت هيئة IANA المنفذ 1883 لبروتوكول MQTT والمنفذ 8883 لـ MQTT عبر TLS. وتوفر البروكرات عادةً الاتصال عبر WebSocket لتتمكن المتصفحات من الاتصال. يوفر MQTT One:
| المنفذ | البروتوكول |
|---|---|
1883 | MQTT عبر TCP |
8883 | MQTT عبر TLS |
8083 | MQTT عبر WebSocket (المسار /mqtt) |
8084 | MQTT عبر WebSocket الآمن (المسار /mqtt) |
لمحة تاريخية
ابتُكر MQTT عام 1999 على يد آندي ستانفورد-كلارك من IBM وأرلين نيبر من شركة Arcom (يوروتك حالياً) لمراقبة خطوط أنابيب النفط عبر اتصالات أقمار صناعية مكلفة، وكان الهدف بروتوكولاً يستهلك أقل قدر ممكن من البيانات والطاقة. أتاحت IBM لاحقاً المواصفات مجاناً، ووفّر مشروع Eclipse Paho عملاء مفتوحي المصدر، وفي عام 2014 أصبح MQTT 3.1.1 معياراً لدى OASIS. واليوم يُستخدم MQTT في المنازل الذكية والسيارات المتصلة والأتمتة الصناعية والخدمات اللوجستية والرعاية الصحية ومجالات لا تُحصى.
جاهز للتجربة؟ اتبع دليل البدء السريع وأرسل أول رسالة إلى MQTT One خلال دقائق.