On this page
מערך שיעור: Processing Service ו-DLQ
משך: 2.5 שעות אקדמיות (113 דקות).
מטרת השיעור: הסטודנטים יבנו Processing Service עם Dead Letter Queue, שירות שני בפרויקט הסיום.
בסוף השיעור הסטודנטים צריכים: לעבד הודעות עם Pandas, לכתוב ל-MongoDB, ולממש DLQ שמונע אובדן נתונים על כישלון.
דגש קריטי: DLQ הוא הרעיון המרכזי החדש בשיעור — קשרו אותו במפורש ל-try/catch ברמת מערכת, לא רק “עוד Topic”.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה וחיבור | 5 דקות | הזכירו try/catch מיחידת C# הבסיסית |
| הבעיה: הודעה כושלת מפילה הכל | 15 דקות | הדגימו consumer שקורס על נתון פגום |
| הרעיון: DLQ | 25 דקות | try/except + Topic נפרד |
| Transform עם Pandas | 20 דקות | חזרה קצרה, קישרו ליחידת ETL |
| Load ל-MongoDB | 15 דקות | קישרו ל-Polyglot Persistence |
| תרגול מודרך | 33 דקות | תרגיל 1+2 + התחלת פרויקט מסכם |
דגשים להעברת השיעור
- ההדגמה הפותחת (Consumer שקורס על נתון פגום, בלי DLQ) חייבת להיות אמיתית — הריצו אותה בפועל, לא רק תארו.
- DLQ שווה קישור מפורש ל-
try/catch/finallyמיחידת היסודות — “זה בדיוק אותו רעיון, ברמת מערכת שלמה במקום שורת קוד בודדת”. - ודאו שסטודנטים ממשיכים ללולאה אחרי טיפול בכישלון (
continueimplicit) — לא לתקוע את כל ה-Consumer על הודעה בודדת.
מושגים
Processing — ניקוי וטרנספורמציה של נתונים גולמיים. Dead Letter Queue (DLQ) — Topic נפרד להודעות כושלות. Load ל-MongoDB — שמירת תוצאה מעובדת ב-Document DB.
תרגיל חשיבה
שאלת פתיחה: “בלי DLQ, מה קורה כש-Consumer שלכם נתקל בהודעה פגומה שגורמת לחריגה בלתי-מטופלת? האם שאר ההודעות ב-Topic עדיין מעובדות?”
מהלך: הובילו לתובנה: בלי טיפול, חריגה בלתי-מטופלת עלולה להפיל את כל תהליך ה-Consumer — כל שאר ההודעות (התקינות!) נתקעות ולא מעובדות עד שמישהו מפעיל את השירות מחדש. זה נזק גדול הרבה יותר מ"הודעה אחת אבודה" — כל הצנרת נעצרת.
מה המרצה מראה בסוף: הריצו Consumer עם הודעה פגומה מכוונת בשידור חי — פעם בלי try/except (הCurrent process קורס, הודעות תקינות אחריה לא מעובדות עד הפעלה מחדש), ופעם עם DLQ מלא (ההודעה הפגומה “יוצאת הצידה”, וכל השאר ממשיכות להתעבד כרגיל ברצף).