نظرة عامة حول معالجة العمليات في ناقل خدمة Microsoft Azure

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

إشعار

  • لا يدعم المستوى الأساسي من ناقل خدمة Microsoft Azure العمليات. المستويات القياسية والمتميزة تدعم العمليات. لمعرفة الاختلافات بين هذه المستويات، راجع الأسعار الخاصة بناقل خدمة Microsoft Azure.
  • لا يتم دعم عمليات إدارة المزج والمراسلة في المعاملة.
  • لا يدعم JavaScript SDK المعاملات.

العمليات في ناقل خدمة Microsoft Azure

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

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

يدعم ناقل خدمة Microsoft Azure عمليات التجميع مقابل كيان مراسلة واحد (قائمة انتظار، موضوع، اشتراك) ضمن نطاق عملية. على سبيل المثال، يمكنك إرسال عدة رسائل إلى قائمة انتظار واحدة من داخل نطاق المعاملة، وسيتم توجيه الرسائل إلى سجل قائمة الانتظار فقط عند إتمام المعاملة بنجاح.

العمليات داخل نطاق المعاملات

العمليات التي يمكن تنفيذها ضمن نطاق معاملة هي كما يلي:

  • إرسال
  • إكمال
  • ترك
  • خامدة
  • تأجيل
  • تجديد القفل

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

ومن ثم، فأن عملية التصرف في الرسائل (إتمام، ترك، إخماد، تأجيل) تحدث ضمن نطاق النتيجة الإجمالية للمعاملة وتعتمد عليها.

هام

لا يعيد ناقل خدمة Microsoft Azure محاولة أي عملية في حالة وجود استثناء عندما تكون العملية في نطاق المعاملة.

العمليات التي لا يتم إدراجها في نطاقات المعاملات

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

عمليات النقل و"الإرسال عبر"

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

تتضح قوة هذه القدرة على المعاملات عندما تكون قائمة انتظار النقل أو الموضوع نفسه هو مصدر رسائل الإدخال الخاصة بالمرسل. بمعنى آخر، يمكن لناقل خدمة Microsoft Azure نقل الرسالة إلى قائمة انتظار الوجهة أو الموضوع "عبر" قائمة انتظار النقل أو الموضوع، مع تنفيذ عملية كاملة (أو تأجيل أو إخماد) على رسالة الإدخال، كل ذلك في عملية ذرية واحدة.

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

إشعار

  • إذا تم إرسال رسالة عبر قائمة انتظار نقل في نطاق المعاملة، TransactionPartitionKey تكون مكافئة وظيفيا ل PartitionKey. وهو يضمن الاحتفاظ بالرسائل معا وبالترتيب الذي يتم نقلها به.
  • إذا تم حذف قائمة انتظار الوجهة أو الموضوع، يتم رفع استثناء 404.

انظر في التعليمات البرمجية

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

ومن ثم، تستخدم أي معاملة بسيطة هذه العناصر، كما في المثال التالي. للإشارة إلى المثال الكامل، راجع مصدر التعليمات البرمجية على GitHub:

var options = new ServiceBusClientOptions { EnableCrossEntityTransactions = true };
await using var client = new ServiceBusClient(connectionString, options);

ServiceBusReceiver receiverA = client.CreateReceiver("queueA");
ServiceBusSender senderB = client.CreateSender("queueB");

ServiceBusReceivedMessage receivedMessage = await receiverA.ReceiveMessageAsync();

using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
    await receiverA.CompleteMessageAsync(receivedMessage);
    await senderB.SendMessageAsync(new ServiceBusMessage());
    ts.Complete();
}

لمعرفة المزيد حول الخاصيةEnableCrossEntityTransactions، راجع المرجع التالي ServiceBusClientBuilder.enableCrossEntityTransactions Method.

المهلة

تنتهي مهلة المعاملة بعد دقيقتين. يبدأ مؤقت المعاملات عند بدء العملية الأولى في المعاملة.

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

لمزيد من المعلومات حول قوائم انتظار خدمة ناقل خدمة Microsoft Azure، اطلّع على المقالات التالية: