הפעלה מחדש של הודעה ב-Pub/Sub על ידי מעבר לתמונת מצב או לחותמת זמן

מערכת Pub/Sub לא יכולה לאחזר את ההודעות אחרי שאישרתם את קבלתן. עם זאת, לפעמים יכול להיות שיהיה צורך להפעיל מחדש את ההודעות שאושרה קבלתן, למשל אם ביצעתם אישור שגוי. אחר כך תוכלו להשתמש בתכונה Seek כדי לסמן הודעות שאושר שהתקבלו כהודעות שלא אושר שהתקבלו, וכך לאלץ את Pub/Sub לשלוח מחדש את ההודעות האלה. אפשר גם להשתמש ב-seek כדי למחוק את ההודעות שלא אושרו על ידי שינוי הסטטוס שלהן ל'אושר'.

אפשר להשתמש בתמונת מצב או בחותמת זמן כדי להפעיל מחדש את ההודעות במינוי. במדריך הזה מוצגות דוגמאות לאופן ההפעלה מחדש של הודעות Pub/Sub שאושר שהתקבלו בעבר באמצעות פעולת חיפוש.


לחצו על תראו לי איך כדי לקרוא הסבר מפורט על המשימה ישירות במסוף Google Cloud :

תראו לי איך


לפני שמתחילים

לפני שמריצים את צינור הנתונים, צריך לבצע את השלבים הבאים.

הגדרת הפרויקט

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. Set up a Google Cloud console project.

    Set up a 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.

  3. התקינו את ה-CLI של Google Cloud.

  4. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  5. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  6. Set up a Google Cloud console project.

    Set up a 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.

  7. התקינו את ה-CLI של Google Cloud.

  8. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  9. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init

התפקידים הנדרשים

כדי להשלים את המדריך למתחילים הזה, אתם צריכים את התפקידים הבאים בניהול הזהויות והרשאות הגישה (IAM).

כדי לקבל את ההרשאות שדרושות לביצוע ההפעלה המהירה הזו, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

שימוש בממשק שורת הפקודה (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 אפשר ליצור תמונות מצב או לחפש תמונות מצב קיימות. כללים למתן שמות לתמונות מצב מפורטים במאמר שמות משאבים.

יצירת תמונת מצב

  1. נכנסים לדף Pub/Sub subscriptions במסוף Google Cloud .

    לדף המינויים

  2. בוחרים מינוי מהרשימה.

  3. לוחצים על יצירת תמונת מצב.

  4. מזינים מזהה לתמונת המצב ולוחצים על יצירה כדי לשמור.

אפשר לראות את התמונות בדף snapshots במסוף Google Cloud . אפשר גם לנהל את התמונות המקדימות בדף הפרטים של נושא ספציפי.

הפעלה חוזרת של מינוי

בתיבת הדו-שיח הפעלה מחדש של הודעות אפשר לחפש נקודת זמן קודמת או תמונת מצב שמורה. כדי לפתוח את תיבת הדו-שיח:

  1. נכנסים לדף Pub/Sub subscriptions במסוף Google Cloud .

    לדף המינויים

  2. בוחרים מינוי מהרשימה.

  3. לוחצים על הפעלה מחדש של הודעות.

  4. בקטע Seek, בוחרים באפשרות To a previous time point (לנקודת זמן קודמת) או To a snapshot (לתמונת מצב), ואז בוחרים את נקודת הזמן או את תמונת המצב שאליהן רוצים לעבור.

  5. לוחצים על חיפוש כדי להפעיל מחדש את ההודעות.

איך היה?

בדף התמיכה של Pub/Sub יש קישורים ומשאבים נוספים.

המאמרים הבאים

מידע נוסף זמין במאמר הפעלה מחדש של הודעות וביטול שלהן.