0Pricing
Cloud & IT Cert Prep · درس

تصفية رسائل SQS وتكامل SNS مع SQS

طبّقوا سياسات تصفية اشتراكات SNS بحيث يتلقى كل مستهلك لـSQS الرسائل التي تهمه فقط، مما يقلل المعالجة غير الضرورية.

تصفية رسائل SQS وتكامل SNS مع SQS درس مجاني في Cloud & IT Cert Prep على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cloud & IT Cert Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.

المشكلة في غياب التصفية

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

كيفية عمل سياسات تصفية SNS

إن سياسة التصفية هي كائن JSON يُطبّق على اشتراك SQS أو Lambda. تقيّم SNS السياسة مقابل سمات الرسالة لكل رسالة قبل تسليمها. فإذا تطابقت سمات الرسالة مع سياسة التصفية، تُسلَّم الرسالة؛ وإلا تتخطى SNS ذلك المشترك بصمت. وتدعم سياسات التصفية مطابقة السلاسل النصية، والنطاقات الرقمية، والمطابقة حسب البادئة، والعامل exists للتحقق من وجود السمة أو غيابها.

# Filter policy: only deliver ELECTRONICS orders from US or EU
{
  'category': ['ELECTRONICS'],
  'region': ['US', 'EU'],
  'amount': [{'numeric': ['>=', 100]}]
}

نطاق سياسة التصفية: سمات الرسالة مقابل نصها

تطابق سياسات التصفية افتراضيًا سمات الرسالة (البيانات الوصفية). ومنذ عام 2023، تدعم SNS أيضًا التصفية المستندة إلى الحمولة (النص) من خلال ضبط نطاق سياسة التصفية على MessageBody. ويتيح ذلك إجراء التصفية مباشرةً على نص الرسالة باستخدام مسارات JSON، من دون مطالبة الناشرين بإضافة سمات. وتوفر تصفية النص مرونة أكبر، لكنها تتطلب أن يكون نص الرسالة بتنسيق JSON صالح. احرصوا دائمًا على التأكد من أن النطاق المحدد يتوافق مع تنسيق المخرجات الذي ينتجه الناشر.

# Set filter scope to MessageBody
aws sns set-subscription-attributes \
  --subscription-arn 'arn:aws:sns:...' \
  --attribute-name FilterPolicyScope \
  --attribute-value MessageBody

aws sns set-subscription-attributes \
  --subscription-arn 'arn:aws:sns:...' \
  --attribute-name FilterPolicy \
  --attribute-value '{"category": ["ELECTRONICS"]}'

شروط التصفية الرقمية وتصفية البادئة

تدعم سياسات التصفية عدة عوامل للمطابقة تتجاوز المساواة البسيطة للسلاسل النصية:

  • رقمي: {"numeric": ["=", 100]}، {"numeric": [">", 50, "<=", 200]}
  • البادئة: {"prefix": "order-"} يطابق أي سلسلة تبدأ بهذه البادئة
  • Anything-but: {"anything-but": ["CANCELLED"]} يطابق أي قيمة باستثناء القيم المدرجة
  • Exists: {"exists": true} يطابق إذا كانت السمة موجودة؛ وfalse إذا كانت غائبة

نشر الرسائل مع سمات للتصفية

لكي تعمل التصفية، يجب أن يضمّن الناشر سمات الرسالة عند النشر إلى SNS. والسمات أزواج مفتاح-قيمة تتضمن نوع بيانات (String أو Number أو Binary). ولا يحتاج الناشر إلى معرفة سياسات التصفية الخاصة بالمشتركين؛ بل يكتفي بإثراء الرسالة بسمات تصف الحدث. وتتولى SNS التوجيه تلقائيًا. ويحافظ ذلك على فك اقتران الناشرين تمامًا عن المنطق الخاص بكل مشترك.

aws sns publish \
  --topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderTopic' \
  --message '{"orderId": "789", "total": 250.00}' \
  --message-attributes '{
    "category": {"DataType": "String", "StringValue": "ELECTRONICS"},
    "region": {"DataType": "String", "StringValue": "US"},
    "amount": {"DataType": "Number", "StringValue": "250"}
  }'

التوزيع المتشعب متعدد المستويات: SNS + قوائم SQS متعددة

يمكن أن تتضمن بنية توزيع متشعب متقدمة توجيه SNS إلى قوائم انتظار SQS بدرجات متعددة من التخصيص: تستقبل إحدى القوائم جميع الطلبات (من دون تصفية) لأغراض التدقيق، وتستقبل أخرى طلبات HIGH_VALUE فقط (بمبلغ >= 1000) لمراجعة الاحتيال، بينما تستقبل قائمة ثالثة طلبات ELECTRONICS فقط لمستودع الأجهزة الإلكترونية. ولكل قائمة انتظار SQS مستهلك Lambda خاص بها. يتيح هذا النمط توسيع كل مستوى من مستويات المعالجة بشكل مستقل، وإضافة مستهلكين جدد من دون تعديل المستهلكين الحاليين أو الناشر.

التسليم من SNS إلى SQS عبر حسابات مختلفة

يمكن لـ SNS التسليم إلى قوائم انتظار SQS الموجودة في حساب AWS مختلف. ويجب أن تسمح السياسة المستندة إلى الموارد الخاصة بقائمة انتظار SQS لمسؤول خدمة SNS باستدعاء sqs:SendMessage من ARN لموضوع SNS في حساب النشر. ويتيح ذلك نشر الأحداث مركزيًا (حساب واحد ينشر، وفرق متعددة من الحسابات تشترك) من دون مشاركة بيانات الاعتماد. ويُعد التوزيع المتشعب عبر الحسابات نمطًا شائعًا في إعدادات AWS Organizations متعددة الحسابات.

# SQS queue policy to allow cross-account SNS delivery
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Principal': {'Service': 'sns.amazonaws.com'},
    'Action': 'sqs:SendMessage',
    'Resource': 'arn:aws:sqs:us-east-1:CONSUMER_ACCOUNT:MyQueue',
    'Condition': {
      'ArnEquals': {'aws:SourceArn': 'arn:aws:sns:us-east-1:PUBLISHER_ACCOUNT:MyTopic'}
    }
  }]
}

استخدام SQS كمنطقة تخزين مؤقت قبل Lambda

عندما يرتفع حجم الأحداث بشكل مفاجئ، تؤدي الاستدعاءات المباشرة من SNS إلى Lambda إلى توسيع نطاق Lambda فورًا، مما قد يرهق قواعد البيانات أو واجهات API اللاحقة. تؤدي إضافة SQS بين SNS وLambda إلى إنشاء منطقة تخزين مؤقت: إذ تسلّم SNS الرسائل إلى SQS، وتستطلع Lambda رسائل SQS بحجم دفعة مضبوط. ويتيح ذلك لـ Lambda المعالجة بمعدل مستدام، بينما تمتص SQS الارتفاعات المفاجئة في حركة المرور. ويعمل عمق قائمة الانتظار كآلية للتحكم في الضغط العكسي؛ إذ يمكنكم مراقبته وإطلاق تنبيه عند تجاوزه حدًا معينًا، بما يشير إلى تأخر المستهلك.

مقارنة التوزيع المتشعب المباشر إلى Lambda بالتوزيع المخزّن مؤقتًا عبر SQS

SNS → Lambda (مباشر): أقل زمن استجابة، ومن دون تخزين مؤقت، مع توسيع نطاق Lambda فورًا. وهو الأفضل للتنبيهات الفورية أو الإشعارات العاجلة التي يكون فيها زمن الاستجابة الأقل من ثانية مهمًا. SNS → SQS → Lambda: يضيف دعم DLQ، ومعدل نقل مضبوطًا، وإعادة المحاولة مع مهلة الرؤية، ومراقبة عمق قائمة الانتظار. وهو الأفضل لمعالجة المعاملات وتحديثات المخزون وأي سيناريو يجب فيه احترام حدود الأنظمة اللاحقة. في أسئلة الاختبار، اختاروا التخزين المؤقت عبر SQS كلما ذُكرت المتانة والتحكم في المعدل.

اختبار سياسات التصفية

استخدم محرر سياسات التصفية في وحدة تحكم SNS لاختبار ما إذا كانت رسالة نموذجية ستطابق سياسة التصفية قبل نشرها. ويمكنك أيضًا استخدام SNS Sandbox لمحاكاة تسليم الرسائل والتحقق من التوجيه. وفي التعليمات البرمجية، تحقّق من صحة سياسات التصفية عبر نشر رسائل اختبار ذات سمات معروفة، وفحص مقاييس CloudWatch لكل اشتراك: يوضّح مقياس NumberOfMessagesFiltered عدد الرسائل التي حجبتها التصفية، ما يساعدك على ضبط السياسات دون انتظار أحداث الإنتاج.

ملخص التكامل من البداية إلى النهاية

يبدو تكامل SNS + SQS الكامل كما يلي: (1) ينشر التطبيق حدثًا في موضوع SNS Standard مع سمات الرسالة؛ (2) تقيّم SNS سياسة التصفية لكل اشتراك، ولا تسلّم إلا الرسائل المطابقة إلى قائمة انتظار SQS الخاصة به؛ (3) تستطلع Lambda كل قائمة انتظار SQS بحجم دفعة مضبوط وتعالج الرسائل؛ (4) تصل الرسائل الفاشلة إلى DLQ الخاصة بقائمة الانتظار بعد بلوغ maxReceiveCount؛ (5) ينبه تنبيه CloudWatch الموضوع على عمق DLQ الفريق. يوفّر هذا النمط المفصول بالكامل والمرن نموذجًا لهندسة SAA-C03.

تحقق سريع

اختبر مدى فهمك لمفاهيم AWS Solutions Architect (SAA-C03) الواردة في هذا الدرس.

مراجعة الدرس

تعلّمت في هذا الدرس أن سياسات تصفية SNS توجّه الرسائل استنادًا إلى سمات الرسالة أو محتوى نصها على مستوى SNS، ما يلغي المعالجة غير الضرورية لدى المستهلكين اللاحقين، وأن نمط SNS→SQS→Lambda يضيف تخزينًا مؤقتًا دائمًا وتحكمًا في معدل المعالجة بين البث إلى عدة مستهلكين والمعالجة، وأن تسليم SQS عبر الحسابات يتيح إنشاء بنية pub/sub مركزية في البيئات متعددة الحسابات باستخدام سياسات موارد قوائم الانتظار. بعد ذلك سنستكشف واجهات REST وHTTP وWebSocket في Amazon API Gateway.

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

هل درس «تصفية رسائل SQS وتكامل SNS مع SQS» مجاني؟

نعم — نص درس «تصفية رسائل SQS وتكامل SNS مع SQS» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cloud & IT Cert Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.

ماذا ستتعلم في «تصفية رسائل SQS وتكامل SNS مع SQS»؟

طبّقوا سياسات تصفية اشتراكات SNS بحيث يتلقى كل مستهلك لـSQS الرسائل التي تهمه فقط، مما يقلل المعالجة غير الضرورية. تتمرن على Cloud & IT Cert Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Cloud & IT Cert Prep؟

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

كم من الوقت يستغرق درس «تصفية رسائل SQS وتكامل SNS مع SQS»؟

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

هل يمكنني كتابة وتشغيل أكواد في درس Cloud & IT Cert Prep هذا؟

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

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

  1. قوائم SQS القياسية مقابل FIFO
  2. مهلة الرؤية وDLQ والاستقصاء الطويل
  3. موضوعات SNS وبنية التوزيع المتعدد
  4. تصفية رسائل SQS وتكامل SNS مع SQS
← العودة إلى Cloud & IT Cert Prep