تسلسل الرسائل والطوابع الزمنية

التسلسل والطابع الزمني ميزتان يتم تمكينهما دائمًا في جميع كيانات Service Bus ويظهران من خلال خصائص Sequence​Number و EnqueuedTimeUtc للرسائل المستلمة أو المستعرضة.

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

الرقم التسلسلي

قيمة SequenceNumber هي عدد صحيح فريد 64 بت يتم تعيينه للرسالة كما يتم قبولها وتخزينها بواسطة الوسيط ويعمل كمعرف داخلي لها. بالنسبة للكيانات المقسمة، تعكس أعلى 16 بت معرف القسم. تتدحرج أرقام التسلسل إلى الصفر عند استنفاد نطاق 48/64 بت.

يمكن الوثوق برقم التسلسل كمعرّف فريد حيث يتم تعيينه من قِبل سلطة مركزية ومحايدة وليس من قِبل العملاء. كما أنه يمثل الترتيب الحقيقي للوصول، وهو أكثر دقة من الطابع الزمني كمعيار طلب، لأن الطوابع الزمنية قد لا تحتوي على دقة عالية بما يكفي بمعدلات رسائل قصوى وقد تخضع لانحراف الساعة (مهما كان ضئيلاً) في المواقف التي انتقال ملكية الوسيط بين العقد.

أمر الوصول المطلق مهم، على سبيل المثال، في سيناريوهات الأعمال التي يتم فيها تقديم عدد محدود من السلع المعروضة على أساس من يأتي أولاً يخدم أولاً بينما تستمر الإمدادات ؛ مبيعات تذاكر الحفل مثال على ذلك.

الطابع الزمني

تعمل إمكانية ختم الوقت كسلطة محايدة وجديرة بالثقة تلتقط بدقة وقت وصول الرسالة بالتوقيت العالمي المنسق (UTC)، وهو ما ينعكس في خاصية EnqueuedTimeUtc . تكون القيمة مفيدة إذا كان سيناريو العمل يعتمد على المواعيد النهائية، مثل ما إذا كان عنصر العمل قد تم تقديمه في تاريخ معين قبل منتصف الليل، ولكن المعالجة تتخلف كثيرًا عن تراكم قائمة الانتظار.

إشعار

يضمن رقم التسلسل من تلقاء نفسه ترتيب الانتظار وترتيب أداة الاستخراج للرسائل، ولكن ليس ترتيب المعالجة ، والذي يتطلب جلسات عمل.

لنفترض أن هناك 5 رسائل في قائمة الانتظار ومستهلكان. المستهلك 1 يلتقط الرسالة 1. المستهلك 2 يلتقط الرسالة 2. ينتهي المستهلك 2 من معالجة الرسالة 2 ويلتقط الرسالة 3 بينما لم يتم "المستهلك 1" مع معالجة الرسالة 1 حتى الآن. ينتهي المستهلك 2 من معالجة الرسالة 3 ولكن المستهلك 1 لم يتم بعد مع معالجة الرسالة 1 حتى الآن. وأخيرا، يكمل المستهلك 1 معالجة الرسالة 1. لذلك، تتم معالجة الرسائل بهذا الترتيب: الرسالة 2 والرسالة 3 والرسالة 1. إذا كنت بحاجة إلى معالجة الرسالة 1 و2 و3 بالترتيب، فستحتاج إلى استخدام جلسات العمل.

لذلك، إذا كانت الرسائل تحتاج فقط إلى استردادها بالترتيب، فلن تحتاج إلى استخدام جلسات العمل. إذا كانت الرسائل بحاجة إلى معالجة بالترتيب، فاستخدم جلسات العمل. يجب تعيين معرف جلسة العمل نفسه على الرسائل التي تنتمي إلى بعضها البعض، والتي قد تكون الرسالة 1 و4 و8 في مجموعة واحدة و2 و3 و6 في مجموعة أخرى.

لمزيد من المعلومات، راجع جلسات رسائل ناقل خدمة Microsoft Azure.

الرسائل المجدولة

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

الرسائل المجدولة لا تتحقق في قائمة الانتظار حتى وقت قائمة الانتظار المحدد. قبل ذلك الوقت، يمكن إلغاء الرسائل المجدولة. الإلغاء يحذف الرسالة.

يمكنك جدولة الرسائل باستخدام أي من عملائنا بطريقتين:

  • استخدم API الإرسال العادية، ولكن تعيين Scheduled​Enqueue​Time​Utc الخاصية على الرسالة قبل إرسال.
  • استخدم API رسالة الجدولة، وقم بتمرير كل من الرسالة العادية والوقت المجدول. تقوم واجهة برمجة التطبيقات بإرجاع SequenceNumber للرسالة المجدولة، والتي يمكنك استخدامها لاحقا لإلغاء الرسالة المجدولة إذا لزم الأمر.

يمكن أيضًا اكتشاف الرسائل المجدولة وأرقام تسلسلها باستخدام تصفح الرسائل .

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

نظرًا لأن الميزة مثبّتة في الرسائل الفردية ويمكن إدراج الرسائل في قائمة الانتظار مرة واحدة فقط، فإن ناقل الخدمة لا تدعم الجداول الزمنية المتكررة للرسائل.

إشعار

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

إشعار

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

استخدام الرسائل المجدولة مع مهام سير العمل

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

غالبا ما تبدأ مهام سير العمل هذه بمعالجة بعض الرسائل، والتي تقوم بعد ذلك بتخزين بعض الحالات، ثم تقوم بجدولة رسالة لمتابعة العملية في وقت لاحق. تسهل أطر العمل مثل NServiceBus و MassTransit دمج كل هذه العناصر معا.

الخطوات التالية

لمعرفة المزيد حول رسائل ناقل الخدمة، راجع الموضوعات التالية:

الموارد الإضافية