הפעלה מחדש של הודעה ב-Pub/Sub על ידי מעבר לתמונת מצב או לחותמת זמן
מערכת Pub/Sub לא יכולה לאחזר את ההודעות אחרי שאישרתם את קבלתן. עם זאת, לפעמים יכול להיות שיהיה צורך להפעיל מחדש את ההודעות שאושרה קבלתן, למשל אם ביצעתם אישור שגוי. אחר כך תוכלו להשתמש בתכונה Seek כדי לסמן הודעות שאושר שהתקבלו כהודעות שלא אושר שהתקבלו, וכך לאלץ את Pub/Sub לשלוח מחדש את ההודעות האלה. אפשר גם להשתמש ב-seek כדי למחוק את ההודעות שלא אושרו על ידי שינוי הסטטוס שלהן ל'אושר'.
אפשר להשתמש בתמונת מצב או בחותמת זמן כדי להפעיל מחדש את ההודעות במינוי. במדריך הזה מוצגות דוגמאות לאופן ההפעלה מחדש של הודעות Pub/Sub שאושר שהתקבלו בעבר באמצעות פעולת חיפוש.
לחצו על תראו לי איך כדי לקרוא הסבר מפורט על המשימה ישירות במסוף Google Cloud :
לפני שמתחילים
לפני שמריצים את צינור הנתונים, צריך לבצע את השלבים הבאים.
הגדרת הפרויקט
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
Set up a Google Cloud console project.
Click to:
- Create or select a project.
- Enable the Pub/Sub API for that project.
You can view and manage these resources at any time in the Google Cloud console.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init Set up a Google Cloud console project.
Click to:
- Create or select a project.
- Enable the Pub/Sub API for that project.
You can view and manage these resources at any time in the Google Cloud console.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init
התפקידים הנדרשים
כדי להשלים את המדריך למתחילים הזה, אתם צריכים את התפקידים הבאים בניהול הזהויות והרשאות הגישה (IAM).
כדי לקבל את ההרשאות שדרושות לביצוע ההפעלה המהירה הזו, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- אדמין Service Usage (
roles/serviceusage.serviceUsageAdmin) - עורך Pub/Sub (
roles/pubsub.editor)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
שימוש בממשק שורת הפקודה (CLI) של gcloud
הדרך הכי קלה להשתמש ב-gcloud היא ב-Cloud Shell . אפשר גם להשתמש בכלי של שורת הפקודה שמגיע עם Google Cloud CLI. אם יוצרים מכונה וירטואלית חדשה ב-Compute Engine עם היקפי גישה שכוללים את כל Cloud APIs ותמונת Debian שמוגדרת כברירת מחדל, הדרישות המוקדמות להגדרה של ה-CLI של gcloud מתקיימות באופן אוטומטי. הדרך הכי פשוטה ליצור אותו היא באמצעות ממשק המשתמש של Compute Engine. בהמשך המאמר הזה נניח שאתם משתמשים באחד מכלי שורת הפקודה האלה.
למידע נוסף על השימוש ב-gcloud, ראו את המדריך למתחילים של gcloud.
רשימה מלאה של פקודות Pub/Sub gcloud זמינה גם בקטע gcloud pubsub במדריך העזר ל-gcloud.
יצירה של תמונות מצב וחיפוש שלהן
יוצרים נושא ומינוי. כדי לשפר את האינטראקטיביות, כדאי להשתמש במועד קצר יותר לאישור:
gcloud pubsub topics create seek-demo-topic gcloud pubsub subscriptions create seek-demo-sub --topic=seek-demo-topic --ack-deadline=10
עד עכשיו, לא התקבל אישור על אף אחת מההודעות במינוי. כדי לתעד את המצב הזה, יוצרים snapshot:
gcloud pubsub snapshots create my-snapshot --subscription=seek-demo-sub gcloud pubsub snapshots list
עכשיו מפרסמים, שולפים ומאשרים הודעה:
gcloud pubsub topics publish seek-demo-topic --message 'hello, world' gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
שימו לב ששליפות עוקבות לא יניבו הודעות חדשות (יכול להיות שיהיו כפילויות זמניות):
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
כדי לשחזר את ההודעה, צריך לחפש את המינוי לצילום המצב. שימו לב: יכול להיות שההודעה לא תישלח באופן מיידי. ב-Pub/Sub אין הבטחה לגבי זמן האחזור של מסירת ההודעה. עם זאת, מה שמובטח הוא שההודעות שנשמרות בתמונת המצב יימסרו בסופו של דבר לפחות פעם אחת:
gcloud pubsub subscriptions seek seek-demo-sub --snapshot=my-snapshot gcloud pubsub subscriptions pull seek-demo-sub --auto-ack
שימו לב שאפשר להירשם לעוד מינויים לאותו צילום מצב, כל עוד הנושא של המינוי זהה לנושא של צילום המצב:
gcloud pubsub subscriptions create seek-demo-sub2 --topic=seek-demo-topic --ack-deadline=10 gcloud pubsub subscriptions seek seek-demo-sub2 --snapshot=my-snapshot
הפעולה pull מ-seek-demo-sub2 תחזיר עכשיו הודעות שפורסמו לפני ש-seek-demo-sub2 נוצר:
gcloud pubsub subscriptions pull seek-demo-sub2 --auto-ack
כשמסיימים לצלם את התמונה, מבצעים ניקוי:
gcloud pubsub snapshots delete my-snapshot
מעבר לחותמת זמן
דרך נוספת להפעלה מחדש של הודעות שאושרה קבלתן היא מעבר לסימן זמן. כדי להגיע לנקודת זמן מסוימת, צריך קודם להגדיר את המינוי כך שישמור הודעות שאושרה קבלתן באמצעות retain-acked-messages. אם הערך של retain-acked-messages מוגדר, מערכת Pub/Sub שומרת הודעות שאושרו למשך 7 ימים.
צריך לבצע את השלב הזה רק אם רוצים לעבור לנקודת זמן מסוימת ולא לתמונה.
gcloud pubsub subscriptions update seek-demo-sub --retain-acked-messages
עכשיו מפרסמים, שולפים ומאשרים הודעה:
gcloud pubsub topics publish seek-demo-topic --message 'hello, world' gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
השליפה הבאה לא אמורה להחזיר הודעות:
gcloud pubsub subscriptions pull seek-demo-sub
עכשיו מחפשים את המינוי אחורה בזמן כדי לשחזר את ההודעה. שימו לב שהדגלים של פעולות החשבון על תאריכים שונים בגרסאות GNU ו-BSD (MacOS) של פקודת התאריך:
export TS_FORMAT=%Y-%m-%dT%H:%M:%SZ gcloud pubsub subscriptions seek seek-demo-sub --time=$(date -u -d '-10 min' +$TS_FORMAT)
מידע נוסף על פורמטים נתמכים של שעות זמין במאמר gcloud topic datetimes.
משיכה נוספת אמורה להחזיר את ההודעה שוב:
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
אפשר גם להשתמש בפונקציה seek כדי לדלג על מסירת כל ההודעות שפורסמו לפני נקודת זמן מסוימת, כמו השעה הנוכחית. כדי לעשות את זה, צריך להעביר את המינוי לזמן הנוכחי כדי לסמן את כל ההודעות הקודמות כמאושרות:
gcloud pubsub topics publish seek-demo-topic --message 'hello, world' gcloud pubsub subscriptions seek seek-demo-sub --time=$(date -u +$TS_FORMAT)
אחרי עיכוב בהפצה (כ-60 שניות), ההודעה לא תימסר יותר. כדי לבדוק את זה, מריצים שוב ושוב את הפקודה pull בלי לאשר את ההודעה:
gcloud pubsub subscriptions pull seek-demo-sub
שימוש במסוף Cloud
בדף פרטי המינוי במסוף Cloud אפשר ליצור תמונות מצב או לחפש תמונות מצב קיימות. כללים למתן שמות לתמונות מצב מפורטים במאמר שמות משאבים.
יצירת תמונת מצב
נכנסים לדף Pub/Sub subscriptions במסוף Google Cloud .
בוחרים מינוי מהרשימה.
לוחצים על יצירת תמונת מצב.
מזינים מזהה לתמונת המצב ולוחצים על יצירה כדי לשמור.
אפשר לראות את התמונות בדף snapshots במסוף Google Cloud . אפשר גם לנהל את התמונות המקדימות בדף הפרטים של נושא ספציפי.
הפעלה חוזרת של מינוי
בתיבת הדו-שיח הפעלה מחדש של הודעות אפשר לחפש נקודת זמן קודמת או תמונת מצב שמורה. כדי לפתוח את תיבת הדו-שיח:
נכנסים לדף Pub/Sub subscriptions במסוף Google Cloud .
בוחרים מינוי מהרשימה.
לוחצים על הפעלה מחדש של הודעות.
בקטע Seek, בוחרים באפשרות To a previous time point (לנקודת זמן קודמת) או To a snapshot (לתמונת מצב), ואז בוחרים את נקודת הזמן או את תמונת המצב שאליהן רוצים לעבור.
לוחצים על חיפוש כדי להפעיל מחדש את ההודעות.
איך היה?
בדף התמיכה של Pub/Sub יש קישורים ומשאבים נוספים.
המאמרים הבאים
מידע נוסף זמין במאמר הפעלה מחדש של הודעות וביטול שלהן.