הפעלה מחדש ומחיקה של הודעות באמצעות פס ההתקדמות

אחרי שמאשרים קבלת הודעות ב-Pub/Sub, הלקוח הרשום לא יכול לגשת יותר להודעות האלה. בנוסף, לקוחות שרשומים למינוי צריכים לעבד כל הודעה במינוי, גם אם נדרש רק חלק מהן.

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

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

תמונת מצב וחיפוש – סקירה כללית

תמונת מצב של Pub/Sub היא תצוגה עמידה, עקבית ומהימנה של מצב אישור ההודעה (ACK) של מינוי בנקודת זמן מסוימת. תמונת מצב מתעדת את סטטוס האישור של כל ההודעות במינוי ברגע היצירה שלה. תמונת מצב שומרת את ההודעות שלא אושרו במינוי המקור בזמן היצירה של תמונת המצב, ואת כל ההודעות שפורסמו בנושא אחרי שתמונת המצב נוצרה.

משך החיים של תמונת מצב נקבע לפי הפיגור הקיים של מינוי המקור. משך החיים שווה ל-7 ימים פחות הגיל של ההודעה הכי ישנה שלא אושרה במינוי. לדוגמה, נניח שיש לכם תמונה של מינוי עם בקלוג, וההודעה הכי ישנה שלא אושרה היא בת יום. התוקף של התמונה יפוג אחרי 6 ימים. ציר הזמן הזה נחוץ כדי שהתמונות המיידיות יספקו הבטחה חזקה למסירה לפחות פעם אחת.

משך החיים המקסימלי האפשרי של תמונת מצב הוא שבעה ימים. אי אפשר ליצור תמונת מצב שתוקף שלה יפוג תוך פחות משעה אחרי מועד היצירה שלה.

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

כדי לחפש זמן בעבר ולהפעיל מחדש הודעות שאושרו בעבר, צריך להגדיר שמירת הודעות בנושא או להגדיר את המינוי כך שישמור הודעות שאושרו. למידע נוסף, קראו את המאמרים הבאים:

מודל עקביות הדרגתי של פעולות חיפוש

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

תרחישים לדוגמה לשימוש בפעולות חיפוש

  • עדכון בטוח של קוד המנוי בעיה בהטמעה של קוד חדש של מנוי היא שהקובץ החדש שניתן להפעלה עלול לאשר הודעות בטעות, מה שיוביל לאובדן הודעות. שילוב של תמונות מצב בתהליך הפריסה מאפשר לכם להתאושש מבאגים בקוד של מנויים חדשים.
  • איך לפתור בעיות בלתי צפויות שקשורות למנויים במקרים שבהם בעיות של מנויים לא משויכות לאירוע פריסה ספציפי, יכול להיות שלא יהיה לכם צילום מסך רלוונטי. במקרה כזה, אם הפעלתם שמירת הודעות שאושרו במינוי, מעבר לנקודת זמן בעבר מאפשר לכם להתאושש מהשגיאה.
  • חיסכון בזמן העיבוד ובעלויות. ביצוע אישור בכמות גדולה של הודעות ישנות שכבר לא רלוונטיות.
  • בודקים את קוד המנוי על נתונים מוכרים. כשבודקים את קוד המנוי כדי לוודא שהוא פועל בצורה עקבית, כדאי להשתמש באותם נתונים בכל הרצה. תמונות מצב מאפשרות לכם לקבל נתונים עקביים עם סמנטיקה חזקה. בנוסף, אפשר להחיל תמונות מצב על כל מינוי לנושא מסוים, כולל מינוי שנוצר לאחרונה.

יצירת קובץ snapshot

אפשר ליצור תמונת מצב באמצעות המסוף, ממשקי Google API או Google Cloud CLI.

המסוף

כדי ליצור תמונת מצב, פועלים לפי השלבים הבאים:

  1. נכנסים לדף Snapshots במסוף Google Cloud .

    כניסה לדף התמונות

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

  3. בקטע בחירת מינוי ל-Pub/Sub, בוחרים מינוי.

  4. בשדה Snapshot ID, מזינים שם לתמונת המצב.

    מידע נוסף על מתן שמות למשאבי Pub/Sub זמין במאמר הנחיות למתן שמות לנושא, למינוי, לסכימה או לתמונת מצב.

  5. לוחצים על Create (יצירה) כדי ליצור את התמונה.

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

gcloud

כדי ליצור snapshot, משתמשים בפקודה הבאה gcloud pubsub snapshots create:

gcloud pubsub snapshots create \
    --project=PROJECT_ID \
    --subscription=SUBSCRIPTION_ID \
    SNAPSHOT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID. מציין את מזהה הפרויקט.

  • SUBSCRIPTION_ID. מציין את מזהה המינוי.

  • SNAPSHOT_ID. מציין את המזהה של תמונת המצב.

מעבר לחותמת זמן

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

אפשר לבצע את סוגי הפעולות הבאים של מעבר למיקום מסוים על סמך חותמות זמן:

  • כדי למחוק את כל ההודעות, אפשר להעביר את הסמן לנקודת זמן עתידית.

  • כדי להפעיל מחדש ולעבד מחדש הודעות שאושרו בעבר, צריך לחפש זמן בעבר.

זמן הפרסום של ההודעה נוצר על ידי שרתי Pub/Sub (ראו publishTime במאמרי העזרה של ה-API). הגישה הזו לא מדויקת מהסיבות הבאות:

  • יכול להיות שיש הבדלים בין השעונים של שרתי Pub/Sub.

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

אפשר להגיע לנקודת זמן באמצעות המסוף, ממשקי Google API או Google Cloud CLI. לפני שמחפשים חותמת זמן במינוי, חשוב לוודא ששימור ההודעות מופעל במינוי.

המסוף

כדי לעבור לנקודת זמן מסוימת, פועלים לפי השלבים הבאים:

  1. נכנסים לדף Subscription במסוף Google Cloud .

    לדף המינוי

  2. לוחצים על מינוי שמופעלת בו שמירת הודעות.

  3. בדף פרטי המינוי, לוחצים על הפעלת הודעות מחדש.

  4. בקטע דילוג, לוחצים על לנקודת זמן קודמת.

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

gcloud

כדי לעבור לחותמת זמן מסוימת, משתמשים בפקודה הבאה gcloud pubsub subscriptions seek:

gcloud pubsub subscriptions seek SUBSCRIPTION_ID \
    --time=TIME \

מחליפים את מה שכתוב בשדות הבאים:

  • TIME: השעה שאליה רוצים לבצע את פעולת החיפוש.
  • SUBSCRIPTION_ID: מזהה המינוי.

מידע נוסף על פורמטים נתמכים של שעות זמין במאמר בנושא gcloud topic datetimes.

מעבר לתמונת מצב

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

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

אם הנתונים המצטברים במינוי ישנים מדי וה-snapshot שיתקבל יפוג תוך פחות משעה, פעולת החיפוש תיכשל.

אפשר לעבור לתמונת מצב באמצעות המסוף, ממשקי Google API או Google Cloud CLI.

המסוף

כדי לעבור לתמונת מצב, פועלים לפי השלבים הבאים:

  1. נכנסים לדף Subscription במסוף Google Cloud .

    לדף המינוי

  2. לוחצים על מינוי.

  3. בדף פרטי המינוי, לוחצים על הפעלת הודעות מחדש.

  4. כדי לדלג, לוחצים על לתמונת מצב.

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

gcloud

כדי לעבור לתמונת מצב, משתמשים בפקודה gcloud pubsub subscriptions seek הבאה:

gcloud pubsub subscriptions seek SUBSCRIPTION_ID \
    --snapshot=SNAPSHOT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • SNAPSHOT_ID: המזהה של קובץ snapshot. הנושא של התמונה צריך להיות זהה לנושא של המינוי.
  • SUBSCRIPTION_ID: מזהה המינוי.

חיפוש באמצעות מסננים

אפשר להפעיל מחדש הודעות ממינויים עם מסננים. אם משתמשים במינוי עם מסנן כדי לעבור לנקודת זמן מסוימת, שירות Pub/Sub מעביר מחדש רק את ההודעות שתואמות למסנן.

תמונת מצב של מינוי עם מסנן מכילה את ההודעות הבאות:

  • כל ההודעות שחדשות יותר מהתמונה, כולל הודעות שלא תואמות למסנן.
  • הודעות שלא אושרו, שנשלחו לפני הצילום.

אם מבצעים מעבר לתמונת מצב באמצעות מינוי עם מסנן, שירות Pub/Sub מעביר מחדש רק את ההודעות בתמונת המצב שתואמות למסנן של המינוי שדרכו מתבצעת בקשת המעבר.

למידע נוסף על מסננים, אפשר לעיין במאמר סינון הודעות.

חיפוש באמצעות נושאים להודעות ללא מוצא

אם מחפשים הודעות במינוי עם נושא להודעות ללא מוצא, Pub/Sub מגדיר את ניסיונות המסירה ל-0. בהודעות שאתם מקבלים מהמינויים האלה יש שדה שבו מפורט מספר ניסיונות המסירה.

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

חיפוש עם מדיניות ניסיון חוזר

אם מחפשים הודעות במינוי עם מדיניות ניסיון חוזר, מערכת Pub/Sub מאפסת את העיכוב בין הפעולות הבאות:

  1. המועד האחרון לאישור קבלה חלף או שהמנוי שלח אישור קבלה שלילי.
  2. המערכת של Pub/Sub שולחת מחדש את ההודעה.

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

חיפוש עם משלוח חד-פעמי בלבד

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

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