Aws-iot-device-sdk-python-v2: تكوين النشر دون اتصال في الإصدار 2

تم إنشاؤها على ٣١ يوليو ٢٠٢٠  ·  6تعليقات  ·  مصدر: aws/aws-iot-device-sdk-python-v2

هل طلب الميزة الخاص بك متعلق بمشكلة؟
لم أكن أرى ما إذا كان قد تم تمكين offline publishing افتراضيًا.

صِف الحل الذي تريده
كما هو الحال في python sdk v1 ، سيكون من الرائع رؤية طريقة مثل configureOfflinePublishQueueing .

صِف البدائل التي فكرت فيها
سيكون لدي قائمة انتظار أحتفظ بها بنفسي إذا تم نشر الرسالة أم لا.

سياق إضافي
https://github.com/aws/aws-iot-device-sdk-python/blob/master/samples/basicPubSub/basicPubSub.py#L101

feature-request

التعليق الأكثر فائدة

أود أيضًا أن أفهم هذا بمزيد من التفصيل. كما ذكرنا أعلاه ، تنتقل الرسائل التي يتم نشرها دون اتصال إلى قائمة الانتظار ثم يتم نشرها عندما يعود الاتصال عبر الإنترنت.

كم عدد الرسائل المخزنة في قائمة الانتظار دون اتصال؟ سمحت لك SDK السابقة باختيار مبلغ محدد أو لانهائي أو لا شيء أو مبلغ محدد. لا يمكنني العثور على أي وثائق حول هذا. يبدو وكأنه لانهائي ولكن أود أن أعرف. سمحت لك SDK السابقة أيضًا بالإفلات من أعلى أو أسفل قائمة الانتظار. هل هذا ممكن الآن؟

سمح لك SDK السابق أيضًا باختيار معدل استنزاف للرسائل المخزنة في قائمة الانتظار. هل هذا شكلي الآن؟ إذا لم يكن كذلك ، فما هي القيمة؟

ال 6 كومينتر

السلوك الحالي هو:

  • يتم وضع جميع الرسائل المنشورة في قائمة الانتظار قبل إرسالها ، بغض النظر عما إذا كان العميل غير متصل أو متصل بالإنترنت.
  • عندما يتصل العميل بالإنترنت (أو إذا كان متصلًا بالفعل) ، يتم إرسال الرسائل من قائمة الانتظار بالترتيب.
  • ومع ذلك: إذا كان العميل متصلاً بالإنترنت ، ولم يكن متصلاً بالإنترنت ، فإنه يلغي في تلك اللحظة كل منشور واشتراك في قائمة الانتظار الخاصة به.

نحن نتفهم أن هذا غير متسق. ربما يريد المستخدم إما:
1) يتم دائمًا وضع الرسائل في قائمة الانتظار حتى يمكن إرسالها
2) تفشل الرسائل إذا كان العميل غير متصل بالإنترنت ، أو أصبح غير متصل قبل إرسالها.

نحن نعمل بنشاط كبير على تقييم تغيير هذا. سأبقي هذه المشكلة مفتوحة وسنقوم بالتحديث عند إجراء التغييرات (أو إضفاء الطابع الرسمي على السلوك الحالي)

إذا كنت تريد السيطرة الكاملة على مصيرك الآن ، فيمكنك إنشاء قائمة انتظار خاصة بك ترسل رسالة واحدة في كل مرة إلى العميل. إذا نجحت ، فأرسل التالي. إذا فشلت ، ثم أعد المحاولة. يمنحك هذا أيضًا فرصة للتحكم الكامل في طول الفترة الزمنية التي يمكن فيها وضع الرسالة في قائمة الانتظار وعدد الرسائل التي سيتم وضعها في قائمة الانتظار وما إلى ذلك.

إذا كنت تريد السيطرة الكاملة على مصيرك الآن ، فيمكنك إنشاء قائمة انتظار خاصة بك ترسل رسالة واحدة في كل مرة إلى العميل. إذا نجحت ، فأرسل التالي. إذا فشلت ، ثم أعد المحاولة. يمنحك هذا أيضًا فرصة للتحكم الكامل في طول الفترة الزمنية التي يمكن فيها وضع الرسالة في قائمة الانتظار وعدد الرسائل التي سيتم وضعها في قائمة الانتظار وما إلى ذلك.

مرحبًاgraebm. كيف ستفعل ذلك؟ إذا كان جهازي ينشر الرسائل ، لكنه غير متصل بالإنترنت ، فأعتقد أن هذه الرسائل تبقى في قائمة انتظار إلى حد ما؟ هل هناك طريقة للوصول إلى قائمة الانتظار هذه وحذف رسائل معينة منها إذا لم يتم نشرها بعد؟

شكرا لك

samvandamme يمكنك ضبط جودة الخدمة (qos) على مرة واحدة على الأكثر (0).
qos=mqtt.QoS.AT_MOST_ONCE
على نفس الجهاز ، اشترك في الموضوع الذي تنشر عليه. ثم للتأكد من إرسال الرسائل ، فإنك تحتفظ بقائمة من الرسائل التي نشرتها. قم بإزالتها فقط عندما تتلقى الرسالة الخاصة بالموضوع مرة أخرى.

السلوك الحالي هو:

  • يتم وضع جميع الرسائل المنشورة في قائمة الانتظار قبل إرسالها ، بغض النظر عما إذا كان العميل غير متصل أو متصل بالإنترنت.
  • عندما يتصل العميل بالإنترنت (أو إذا كان متصلًا بالفعل) ، يتم إرسال الرسائل من قائمة الانتظار بالترتيب.
  • ومع ذلك: إذا كان العميل متصلاً بالإنترنت ، ولم يكن متصلاً بالإنترنت ، فإنه يلغي في تلك اللحظة كل منشور واشتراك في قائمة الانتظار الخاصة به.

نحن نتفهم أن هذا غير متسق. ربما يريد المستخدم إما:

  1. يتم دائمًا وضع الرسائل في قائمة الانتظار حتى يمكن إرسالها
  2. تفشل الرسائل إذا كان العميل غير متصل بالإنترنت ، أو أصبح غير متصل قبل إرسالها.

نحن نعمل بنشاط كبير على تقييم تغيير هذا. سأبقي هذه المشكلة مفتوحة وسنقوم بالتحديث عند إجراء التغييرات (أو إضفاء الطابع الرسمي على السلوك الحالي)

إذا كنت تريد السيطرة الكاملة على مصيرك الآن ، فيمكنك إنشاء قائمة انتظار خاصة بك ترسل رسالة واحدة في كل مرة إلى العميل. إذا نجحت ، فأرسل التالي. إذا فشلت ، ثم أعد المحاولة. يمنحك هذا أيضًا فرصة للتحكم الكامل في طول الفترة الزمنية التي يمكن فيها وضع الرسالة في قائمة الانتظار وعدد الرسائل التي سيتم وضعها في قائمة الانتظار وما إلى ذلك.

إذن ما هي الطريقة الموصى بها للتعامل مع الأجهزة التي تعمل دون اتصال لبعض الفترات الزمنية؟

بافتراض أن لدي جهازًا يرسل الرسائل كل 5 ثوانٍ ، فإن الجهاز متصل بالإنترنت ، والرسائل تصل إلى AWS IoT Core. بعد ذلك ، فقد الجهاز الاتصال لمدة 10 دقائق ثم انتقل إلى الاتصال بالإنترنت مرة أخرى. ماذا يحدث لكل تلك الرسائل التي تمت محاولة نشرها خلال فترة العشر دقائق في وضع عدم الاتصال؟ هل يتم نشرها بمجرد اتصال الجهاز بالإنترنت مرة أخرى أم يتم فقدها إلى الأبد؟

ستفقد الرسائل القليلة الأولى بينما لم يدرك sdk أنه لم يعد مفصولاً. سيتم حفظ جميع الرسائل اللاحقة في قائمة الانتظار وإرسالها عند استعادة الاتصال.

عند اختبار هذا ، فقدت أول 5 رسائل عند استخدام pubsub ، الذي يرسل رسائل كل ثانية. لذلك ستفقد رسالة واحدة فقط في معظم الأوقات.

أود أيضًا أن أفهم هذا بمزيد من التفصيل. كما ذكرنا أعلاه ، تنتقل الرسائل التي يتم نشرها دون اتصال إلى قائمة الانتظار ثم يتم نشرها عندما يعود الاتصال عبر الإنترنت.

كم عدد الرسائل المخزنة في قائمة الانتظار دون اتصال؟ سمحت لك SDK السابقة باختيار مبلغ محدد أو لانهائي أو لا شيء أو مبلغ محدد. لا يمكنني العثور على أي وثائق حول هذا. يبدو وكأنه لانهائي ولكن أود أن أعرف. سمحت لك SDK السابقة أيضًا بالإفلات من أعلى أو أسفل قائمة الانتظار. هل هذا ممكن الآن؟

سمح لك SDK السابق أيضًا باختيار معدل استنزاف للرسائل المخزنة في قائمة الانتظار. هل هذا شكلي الآن؟ إذا لم يكن كذلك ، فما هي القيمة؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

mkozjak picture mkozjak  ·  17تعليقات

supertick picture supertick  ·  7تعليقات

banuprathap picture banuprathap  ·  10تعليقات

satay99 picture satay99  ·  6تعليقات

victorct-pronto picture victorct-pronto  ·  3تعليقات