0Pricing
Azure Fundamentals · درس

Azure Service Bus للمراسلة غير المقترنة

أنشئ مساحة أسماء Service Bus مع قوائم انتظار وموضوعات، وأرسل الرسائل واستقبلها من تطبيق، واضبط قوائم انتظار الرسائل الميتة لمعالجة الرسائل الفاشلة

Azure Service Bus للمراسلة غير المقترنة درس مجاني في Azure Fundamentals على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Azure Fundamentals، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.

لماذا نفصل المكوّنات باستخدام المراسلة؟

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

مساحات أسماء Service Bus وطبقاتها

تُعد مساحة أسماء Service Bus الحاوية ذات المستوى الأعلى لجميع كيانات المراسلة (قوائم الانتظار والمواضيع)، كما توفر نقطة نهاية FQDN (مثلًا: myns.servicebus.windows.net). تتوفر مساحات الأسماء في ثلاث طبقات: Basic (قوائم انتظار فقط، بلا مواضيع، والحد الأقصى لحجم الرسالة 256 كيلوبايت)، وStandard (قوائم انتظار ومواضيع، والحد الأقصى 256 كيلوبايت)، وPremium (قوائم انتظار ومواضيع، ورسائل يصل حجمها إلى 100 ميغابايت، وسعة مخصصة، وتكامل VNet، والتعافي من الكوارث الجغرافية). تكون Premium مطلوبة لأحمال الإنتاج التي تحتاج إلى أداء مدعوم باتفاقية مستوى الخدمة.

# Create a Service Bus namespace (Standard tier)
az servicebus namespace create \
  --resource-group myRG \
  --name myservicebusns \
  --location eastus \
  --sku Standard

قوائم الانتظار: المراسلة من نقطة إلى نقطة

تخزّن قائمة انتظار Service Bus الرسائل بترتيب FIFO، وتسلّم كل رسالة إلى مستهلك واحد فقط. يستقبل المستهلكون الرسائل باستخدام آلية peek-lock: إذ تُخفى الرسالة مؤقتًا عن المستهلكين الآخرين أثناء معالجتها. وإذا أتمّ المستهلك المعالجة بنجاح، فإنه يستدعي CompleteMessage() لإزالة الرسالة من قائمة الانتظار. أما إذا فشلت المعالجة، فيستدعي المستهلك AbandonMessage()، فتصبح الرسالة مرئية مرة أخرى لإعادة المحاولة. وبعد عدد قابل للتهيئة من محاولات التسليم، تُنقل الرسائل التي يتعذر معالجتها إلى قائمة الرسائل غير القابلة للتسليم (DLQ).

# Create a Service Bus queue with DLQ enabled
az servicebus queue create \
  --resource-group myRG \
  --namespace-name myservicebusns \
  --name orders \
  --max-delivery-count 5 \
  --default-message-time-to-live P7D \
  --dead-lettering-on-message-expiration true

المواضيع والاشتراكات

تطبّق المواضيع نمط النشر والاشتراك: يرسل المنتج رسالة إلى موضوع، وتتلقى أيًّا من الاشتراكات الموجودة في ذلك الموضوع نسخةً من الرسالة. ويمكن أن تحتوي الاشتراكات على عوامل تصفية (تعبيرات SQL أو تعبيرات الارتباط) لتلقي مجموعة فرعية فقط من الرسائل — مثل اشتراك HighPriority الذي لا يتلقى إلا الرسائل التي تكون فيها الخاصية Priority مساوية للقيمة High. يتيح ذلك لموضوع واحد توزيع الرسائل على العديد من الخدمات التابعة، بحيث تهتم كل خدمة بمجموعة فرعية مختلفة من الأحداث.

# Create a topic and two subscriptions with filters
az servicebus topic create \
  --resource-group myRG \
  --namespace-name myservicebusns \
  --name order-events

az servicebus topic subscription create \
  --resource-group myRG \
  --namespace-name myservicebusns \
  --topic-name order-events \
  --name high-priority-sub

az servicebus topic subscription rule create \
  --resource-group myRG \
  --namespace-name myservicebusns \
  --topic-name order-events \
  --subscription-name high-priority-sub \
  --name PriorityFilter \
  --filter-sql-expression 'Priority = '"'"'High'"'"''

إرسال الرسائل واستقبالها

يوفر Azure Service Bus SDK كائن ServiceBusClient لإرسال الرسائل واستقبالها. وللإرسال، أنشئوا ServiceBusSender واستدعوا SendMessageAsync(). وللاستقبال، أنشئوا ServiceBusReceiver واستدعوا ReceiveMessageAsync() (المعتمد على السحب)، أو استخدموا ServiceBusProcessor مع معالج أحداث للمعالجة المستمرة المعتمدة على الدفع. يؤدي استخدام DefaultAzureCredential مع Service Bus SDK إلى إلغاء الحاجة إلى سلاسل الاتصال، مع الحفاظ على نمط عدم استخدام كلمات المرور.

# Python: Send a message to a Service Bus queue
from azure.servicebus import ServiceBusClient, ServiceBusMessage
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
client = ServiceBusClient(
  fully_qualified_namespace='myservicebusns.servicebus.windows.net',
  credential=credential
)
with client.get_queue_sender(queue_name='orders') as sender:
    msg = ServiceBusMessage('{ 'orderId': '12345', 'amount': 99.99 }')
    sender.send_messages(msg)
    print('Message sent')

قائمة الرسائل غير القابلة للتسليم

تُعد قائمة الرسائل غير القابلة للتسليم (DLQ) قائمة انتظار فرعية تتلقى تلقائيًا الرسائل التي يتعذر تسليمها. تُنقل الرسائل إلى هذه القائمة عندما: تتجاوز الحد الأقصى لعدد مرات التسليم، أو تنتهي صلاحيتها (انقضاء TTL)، أو تفشل في اجتياز تقييم عامل تصفية اشتراك في موضوع. تُعد مراقبة DLQ أمرًا أساسيًا — إذ تشير الزيادة المستمرة فيها إلى فشل منهجي في المعالجة. وتحتفظ رسائل DLQ بمحتواها الأصلي، إضافةً إلى الخاصيتين سبب النقل إلى قائمة الرسائل غير القابلة للتسليم والوصف اللتين تضيفهما Service Bus للمساعدة في تشخيص السبب الجذري.

# Read messages from the dead-letter queue
az servicebus queue show \
  --resource-group myRG \
  --namespace-name myservicebusns \
  --name 'orders/$DeadLetterQueue' \
  --query 'countDetails.deadLetterMessageCount'

جلسات الرسائل للحفاظ على الترتيب

تتيح الجلسات الحفاظ الصارم على ترتيب الرسائل التي تنتمي إلى المجموعة المنطقية نفسها. وتُوسم كل رسالة بـ SessionId (مثل معرّف العميل أو معرّف الطلب)، ويتلقى المستهلك المتوافق مع الجلسات جميع الرسائل الخاصة بجلسة معينة بترتيب FIFO وبشكل حصري. وتُعد الجلسات ضرورية لسير العمل الذي يجب أن تُنفَّذ خطواته بالتسلسل — مثل معالجة جميع الأحداث الخاصة بطلب معين: Created → PaymentReceived → Shipped → Delivered. ويتم تمكين الجلسات عند إنشاء قائمة الانتظار أو الاشتراك.

Service Bus مقابل Event Grid مقابل Event Hubs

غالبًا ما يحدث خلط بين خدمات المراسلة الثلاث هذه في Azure: يُستخدم Service Bus للمراسلة المؤسسية الموثوقة والمعاملاتية، مع الحفاظ على الترتيب والجلسات وDLQ — وهو مناسب لمعالجة الطلبات والمعاملات المالية وتنسيق سير العمل. أما Event Grid فيُستخدم لتوجيه الأحداث التفاعلية (مثل تحميل كائن ثنائي أو حذف جهاز ظاهري)، مع توزيعها على معالجات متعددة، لكنه لا يوفر الحفاظ على الترتيب أو إعادة التشغيل. ويُستخدم Event Hubs لبث الأحداث بمعدل نقل عالٍ (ملايين الأحداث في الثانية)، مع إمكانية إعادة التشغيل — وهو مناسب لبيانات القياس عن بُعد لأجهزة IoT واستيعاب السجلات. اختاروا الخدمة بناءً على متطلبات الترتيب ومعدل النقل والمتانة.

التعافي من الكوارث الجغرافية

ينسخ التعافي من الكوارث الجغرافية (Geo-DR) في Service Bus بيانات التعريف لمساحة الاسم (قوائم الانتظار والمواضيع والاشتراكات وسياسات الوصول) إلى منطقة ثانوية. وتتشارك المنطقتان المقترنتان اسم مضيف مستعارًا واحدًا؛ فإذا فشلت المنطقة الأساسية، تبدأون عملية تجاوز الفشل، ويُحل الاسم المستعار إلى المنطقة الثانوية. لاحظوا أن بيانات الرسائل (الرسائل قيد المعالجة) لا تُنسخ في الطبقة Standard — إذ لا تنسخ الرسائل إلا ميزة Geo-DR في الطبقة Premium. وللمراسلة بالغة الأهمية، استخدموا Premium مع Geo-DR لتلبية متطلبات RTO وRPO.

التوسّع والكيانات المقسّمة

للسيناريوهات ذات معدل النقل العالي، فعّلوا التقسيم في قوائم الانتظار والمواضيع عند إنشائها. تستخدم الكيانات المقسّمة عدة وسطاء للرسائل وأجزاء تخزين داخليًا، مما يضاعف سعة معدل النقل. وفي الطبقة Standard، يصل الحجم الإجمالي للكيانات المقسّمة إلى 80 غيغابايت. وتُوجَّه كل رسالة إلى قسم استنادًا إلى الخاصية PartitionKey (ويكون معرّف الجلسة هو القيمة الافتراضية إذا كانت الجلسات مُمكّنة). التقسيم قرار يُتخذ مرة واحدة عند الإنشاء — ولا يمكن تقسيم قائمة انتظار موجودة. استخدموا الطبقة Premium للحصول على أعلى معدل نقل مضمون من دون تعقيدات التقسيم.

# Create a partitioned queue (Standard tier)
az servicebus queue create \
  --resource-group myRG \
  --namespace-name myservicebusns \
  --name orders-partitioned \
  --enable-partitioning true

مراقبة صحة Service Bus

من مقاييس Service Bus الأساسية التي ينبغي مراقبتها في Azure Monitor: Active Messages (عمق قائمة الانتظار — يشير ارتفاع العمق إلى تأخر المستهلك)، وDead-lettered Messages (حالات فشل المعالجة)، وServer Errors وUser Errors (مشكلات المصادقة والتحكم في معدل الطلبات)، وIncoming Requests (معدل النقل الإجمالي). كوّنوا تنبيهات للمقاييس حتى يتم إخطار فرق العمليات عندما تتجاوز قائمة الرسائل غير القابلة للتسليم حدًا معينًا، أو عندما لا تتم معالجة الرسائل النشطة خلال فترة زمنية مستمرة.

تحقّق سريع

اختبروا مدى فهمكم لمفاهيم Microsoft Azure Fundamentals (AZ-900) الواردة في هذا الدرس.

مراجعة الدرس

تعلّمتم في هذا الدرس أن قوائم انتظار Service Bus توفر مراسلة من نقطة إلى نقطة مع التسليم باستخدام peek-lock وقائمة للرسائل غير القابلة للتسليم للرسائل الفاشلة، وأن المواضيع والاشتراكات توزّع الرسائل على مستهلكين متعددين باستخدام قواعد عوامل التصفية، وأن الجلسات تتيح معالجة الرسائل المرتبطة بالمجموعة المنطقية نفسها بترتيب محدد. بعد ذلك، سنستكشف Azure Container Apps لنشر الخدمات المصغّرة الحديثة.

الأسئلة الشائعة

هل درس «Azure Service Bus للمراسلة غير المقترنة» مجاني؟

نعم — نص درس «Azure Service Bus للمراسلة غير المقترنة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Azure Fundamentals، انتقل إلى CoddyKit PRO. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.

ماذا ستتعلم في «Azure Service Bus للمراسلة غير المقترنة»؟

أنشئ مساحة أسماء Service Bus مع قوائم انتظار وموضوعات، وأرسل الرسائل واستقبلها من تطبيق، واضبط قوائم انتظار الرسائل الميتة لمعالجة الرسائل الفاشلة تتمرن على Azure Fundamentals مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Azure Fundamentals؟

لا تُشترط خبرة سابقة. Azure Fundamentals على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «Azure Service Bus للمراسلة غير المقترنة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Azure Fundamentals هذا؟

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

جميع الدروس في هذه الدورة

  1. الهوية المدارة للمصادقة دون كلمات مرور
  2. Azure Service Bus للمراسلة غير المقترنة
  3. Azure Container Apps
  4. سير عمل المطوّر من البداية إلى النهاية
← العودة إلى Azure Fundamentals