אחרי שמאשרים קבלת הודעות ב-Pub/Sub, הלקוח הרשום לא יכול לגשת יותר להודעות האלה. בנוסף, לקוחות של מינויים צריכים לעבד כל הודעה במינוי, גם אם נדרש רק חלק מהן.
התכונה חיפוש מרחיבה את היכולות של המנויים בכך שהיא מאפשרת לשנות את מצב האישור של הודעות בכמות גדולה. לדוגמה, אפשר להפעיל מחדש הודעות שאושרו בעבר או למחוק הודעות בכמות גדולה. בנוסף, אפשר להעתיק את מצב האישור של מינוי אחד למינוי אחר באמצעות חיפוש בשילוב עם תמונת מצב.
כדי לראות הדגמה מהירה של אופן הפעולה של התכונות האלה, אפשר לעיין במאמר בנושא הפעלה מחדש של הודעה ב-Pub/Sub על ידי מעבר לתמונת מצב או לחותמת זמן.
תמונה במסגרת וחיפוש – סקירה כללית
תמונת מצב ב-Pub/Sub היא תצוגה עמידה, עקבית ומהימנה של מצב אישור ההודעה (ack) של מינוי בנקודת זמן מסוימת. תמונת מצב מתעדת את מצב האישור של כל ההודעות במינוי ברגע היצירה שלה. תמונת מצב שומרת את ההודעות שלא אושרו במינוי המקור בזמן היצירה של תמונת המצב, ואת כל ההודעות שפורסמו בנושא אחרי שתמונת המצב נוצרה.
משך החיים של תמונת מצב נקבע לפי ה-backlog הקיים של מינוי המקור. משך החיים שווה ל-7 ימים פחות הגיל של ההודעה הכי ישנה שלא אושרה במינוי. לדוגמה, נניח שיש לכם תמונת מצב של מינוי עם הצטברות של הודעות, וההודעה הכי ישנה שלא אושרה היא בת יום. התוקף של התמונה יפוג אחרי 6 ימים. ציר הזמן הזה נחוץ כדי שהתמונות המיידיות יספקו הבטחה חזקה למסירה לפחות פעם אחת.
משך החיים המקסימלי האפשרי של תמונת מצב הוא שבעה ימים. אי אפשר ליצור תמונת מצב שתוקף שלה יפוג תוך פחות משעה אחרי מועד היצירה שלה.
התכונה 'חיפוש' מאפשרת לכם לחפש תמונה או חותמת זמן ספציפיות במינוי. התכונה הזו מאפשרת לכם לקבוע איך Pub/Sub יכול לספק הודעות מנקודת זמן ספציפית או מתמונת מצב ספציפית.
כדי לחפש הודעות שהתקבלו בעבר ולהפעיל אותן מחדש, צריך קודם להגדיר שמירה של הודעות בנושא או להגדיר את המינוי כך שהודעות שאושרו יישמרו.
מודל עקביות הדרגתי של פעולות חיפוש
פעולות חיפוש הן עקביות לחלוטין מבחינת ההבטחה למסירת ההודעה. המשמעות היא שכל הודעה שצריכה להיות לא מאושרת על סמך תנאי החיפוש, מובטח שתועבר בסופו של דבר אחרי שפעולת החיפוש תצליח. עם זאת, ההודעות שנמסרו לא הופכות באופן מיידי לעקביות עם פעולת החיפוש. לכן, יכול להיות שהודעה שפורסמה לפני חותמת הזמן של המיקום או שאושרה בצילום מצב תועבר אחרי פעולת המיקום. במובן מסוים, מסירת ההודעות פועלת כמערכת עקבית הדרגתית ביחס לפעולת החיפוש. יכול להיות שיעברו עד דקה עד שהפעולה תיכנס לתוקף באופן מלא.
תרחישים לדוגמה לשימוש בפעולות חיפוש
- עדכון בטוח של קוד המינוי בעיה בהטמעה של קוד חדש של מנוי היא שהקובץ החדש שניתן להפעלה עלול לאשר הודעות בטעות, מה שיוביל לאובדן הודעות. שילוב של תמונות מצב בתהליך הפריסה מאפשר לכם להתאושש מבאגים בקוד של מנויים חדשים.
- איך לפתור בעיות בלתי צפויות שקשורות למנויים במקרים שבהם בעיות של מנויים לא משויכות לאירוע פריסה ספציפי, יכול להיות שלא יהיה לכם צילום מסך רלוונטי. במקרה כזה, אם הפעלתם שמירת הודעות שאושרו במינוי, מעבר לנקודת זמן בעבר מאפשר לכם להתאושש מהשגיאה.
- חיסכון בזמן העיבוד ובעלויות. ביצוע אישור בכמות גדולה של הודעות ישנות שכבר לא רלוונטיות.
- בודקים את קוד המנוי על נתונים מוכרים. כשבודקים את קוד המנוי כדי לוודא שהוא פועל בצורה עקבית, כדאי להשתמש באותם נתונים בכל הרצה. תמונות מצב מאפשרות לכם לקבל נתונים עקביים עם סמנטיקה חזקה. בנוסף, אפשר להחיל תמונות מצב על כל מינוי לנושא מסוים, כולל מינוי שנוצר לאחרונה.
הגדרת שמירת הודעות
אפשר להגדיר שמירה של הודעות בנושא מסוים, וגם להגדיר שמירה של הודעות שאושרה קבלתן בכל אחד מהמינויים שלו. כדאי להגדיר שמירת הודעות בנושא אם רוצים שההודעות יישמרו להפעלה חוזרת למשך זמן ארוך יותר משמירת ההודעות שהוגדרה במינוי. במצב הזה, הפרויקט של הנושא והפרויקט של המינוי מחויבים על אחסון ההודעות בהתאם להגדרות שמירת ההודעות שלהם.
אם לא מוגדרת שמירת הודעות בנושא, הודעה שלא אושרה נמחקת מהמינוי כשהגיל שלה עובר את הערך של המאפיין message_retention_duration של המינוי. לעומת זאת, אם מוגדרת שמירה של הודעות בנושא, ההודעה שלא אושרה נמחקת מהמינוי רק כשהגיל שלה חורג מהמקסימום של message_retention_durations הנושא והמינוי.
הגדרת משך השמירה של הודעות בנושא
כברירת מחדל, נושא Pub/Sub משליך הודעות ברגע שכל המינויים שמצורפים לנושא מאשרים את קבלתן.
הגדרת נושא עם שמירת הודעות מעניקה לכם יותר גמישות, ומאפשרת לכל מי שמנוי לנושא לחזור אחורה בזמן ולהפעיל מחדש הודעות שאושרו בעבר עד message_retention_duration הנושא.
שמירת הודעות לפי נושא מאפשרת גם להפעיל מחדש מינוי כדי להציג הודעות שפורסמו לפני שיצרתם את המינוי.
נושא יכול לשמור הודעות שפורסמו למשך 31 ימים לכל היותר (אפשר להגדיר את משך הזמן הזה באמצעות המאפיין message_retention_duration של הנושא), גם אחרי שכל המינויים שמצורפים אליו אישרו את קבלת ההודעות. במקרים שבהם הערך של message_retention_duration בנושא גדול מהערך של message_retention_duration במינוי, Pub/Sub משליך הודעה רק כשהגיל שלה חורג מהערך של message_retention_duration בנושא.
אם מופעלת שמירת הודעות בנושא, עלויות האחסון של ההודעות שנשמרות בנושא יחויבו בפרויקט של הנושא.
המסוף
כדי ליצור נושא עם שמירת הודעות מופעלת:
נכנסים לדף Pub/Sub topics במסוף Cloud de Confiance .
לוחצים על יצירת נושא.
בשדה Topic ID (מזהה הנושא), מזינים מזהה לנושא.
מפעילים את ההגדרה הגדרת משך השמירה של הודעות.
משאירים את שאר האפשרויות בהגדרות ברירת המחדל.
בתפריט הנפתח משך שמירת ההודעות, בוחרים את מספר הימים, השעות והדקות לשמירת ההודעות.
לוחצים על יצירת נושא כדי לשמור את הנושא.
כדי לעדכן את הגדרות שמירת ההודעות בנושא מסוים:
בוחרים את הנושא בדף Pub/Sub topics.
לוחצים על עריכה בחלק העליון של דף פרטי הנושא.
כדי לשנות את זמן השמירה או להפעיל או להשבית את שמירת ההודעות, מסמנים או מבטלים את הסימון של האפשרות הפעלת שמירת הודעות.
לוחצים על עדכון כדי לשמור את השינויים בנושא.
gcloud
כדי ליצור נושא עם משך שמירת הודעות של 7 ימים, משתמשים בפקודה הבאה gcloud pubsub topics create:
gcloud pubsub topics create TOPIC_ID --message-retention-duration=7d
אפשר לעדכן את ההגדרה הזו באמצעות gcloud pubsub topics update
. אפשר גם להפעיל שמירת הודעות בנושא קיים:
gcloud pubsub topics update TOPIC_ID --message-retention-duration=1d
אפשר גם להשבית את שמירת ההודעות בנושא באמצעות הפקודה update:
gcloud pubsub topics update TOPIC_ID --clear-message-retention-duration
הגדרה של שמירת הודעות על מינויים
שירות Pub/Sub מתחיל לשמור הודעות בשם מינוי כשהמינוי נוצר. כברירת מחדל, Pub/Sub משליך הודעה ממינוי ברגע שההודעה מאושרת.
הודעות שלא התקבלה לגביהן אינדיקציה שהן נקראו נשמרות למשך 7 ימים כברירת מחדל (אפשר להגדיר את משך השמירה באמצעות המאפיין message_retention_duration של המינוי).
הגדרת מינוי לשמירת הודעות שאושרה קבלתן (באמצעות המאפיין
retain_acked_messages
) מאפשרת לכם להפעיל מחדש הודעות שאושרה קבלתן ושנשמרו במינוי. אתם יכולים להגדיר שההודעות יישמרו במינוי למשך 31 ימים לכל היותר. ההגדרה הזו חלה על הודעות שאושרו ועל הודעות שלא אושרו.
אם מינוי מוגדר לשמירת הודעות שאושרה קבלתן, עלויות האחסון של ההודעות האלה יחויבו בפרויקט של המינוי.
המסוף
כדי ליצור מינוי עם שמירה של הודעות שאושרה קבלתן, פועלים לפי השלבים הבאים:
נכנסים לדף Pub/Sub subscriptions במסוף Cloud de Confiance .
לוחצים על יצירת מינוי.
בשדה מזהה מינוי, מזינים מזהה למינוי.
בתפריט הנפתח משך השמירה של ההודעות, בוחרים את מספר הימים, השעות והדקות שבהם ההודעות יישמרו.
מפעילים את האפשרות שמירת הודעות שאושרו. משאירים את שאר האפשרויות בהגדרות ברירת המחדל.
לוחצים על יצירת מינוי כדי לשמור את המינוי.
כדי לעדכן את הגדרות השימור של הודעות במינוי:
בדף מינויים ל-Pub/Sub, בוחרים את המינוי.
לוחצים על עריכה בחלק העליון של דף פרטי המינוי.
כדי לשנות את משך השמירה של ההודעות או להפעיל או להשבית את השמירה של הודעות שאושרה קבלתן, מסמנים או מבטלים את הסימון בשדה שמירת הודעות שאושרה קבלתן.
לוחצים על עדכון כדי לשמור את השינויים במינוי.
gcloud
כדי ליצור מינוי עם שימור של הודעות שאושרה קבלתן, משתמשים בפקודה הבאה של gcloud pubsub subscriptions create:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --retain-acked-messages --message-retention-duration=5d
אפשר לעדכן את ההגדרה הזו באמצעות gcloud pubsub subscriptions update. אפשר גם להפעיל שמירה של הודעות שאושרה קבלתן במינוי קיים:
gcloud pubsub subscriptions update SUBSCRIPTION_ID --message-retention-duration=1d
אפשר גם להשבית את השמירה של הודעות שאושרה קבלתן במינוי באמצעות הפקודה update:
gcloud pubsub subscriptions update SUBSCRIPTION_ID --no-retain-acked-messages
יצירת תמונת מצב
אפשר ליצור תמונת מצב באמצעות המסוף, ממשקי Google API או Google Cloud CLI.
המסוף
כדי ליצור תמונת מצב, פועלים לפי השלבים הבאים:
נכנסים לדף Snapshots במסוף Cloud de Confiance .
לוחצים על יצירת תמונת מצב.
בקטע בחירת מינוי ל-Pub/Sub, בוחרים מינוי.
בשדה Snapshot ID, מזינים שם לתמונת המצב.
מידע נוסף על מתן שמות למשאבי Pub/Sub זמין במאמר הנחיות למתן שמות לנושא, למינוי, לסכימה או לתמונת מצב.
לוחצים על 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. לפני שמחפשים חותמת זמן במינוי, צריך לוודא ששמירת ההודעות מופעלת במינוי.
המסוף
כדי לעבור לנקודת זמן מסוימת, פועלים לפי השלבים הבאים:
נכנסים לדף Subscription במסוף Cloud de Confiance .
לוחצים על מינוי שמופעלת בו שמירת הודעות.
בדף פרטי המינוי, לוחצים על הפעלת הודעות מחדש.
בקטע דילוג, לוחצים על לנקודת זמן קודמת.
בוחרים תאריך ושעה מתאימים ולוחצים על חיפוש.
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.
המסוף
כדי לעבור לתמונת מצב, פועלים לפי השלבים הבאים:
נכנסים לדף Subscription במסוף Cloud de Confiance .
לוחצים על מינוי.
בדף פרטי המינוי, לוחצים על הפעלת הודעות מחדש.
כדי לדלג, לוחצים על לתמונת מצב.
בוחרים תמונת מצב מתאימה ולוחצים על חיפוש.
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 מאפסת את העיכוב בין הפעולות הבאות:
- המועד האחרון לאישור קבלה חלף או שהמנוי שלח אישור קבלה שלילי.
- המערכת של Pub/Sub שולחת מחדש את ההודעה.
מידע נוסף על מדיניות ניסיון חוזר זמין במאמר בנושא שימוש במדיניות ניסיון חוזר.
חיפוש עם משלוח חד-פעמי בלבד
אם מחפשים הודעות במינוי עם מסירה בדיוק פעם אחת, מערכת Pub/Sub שולחת מחדש את ההודעות שאושרו בעבר ושעומדות בדרישות למסירה. כל אישור שיישלח על מסירה שבוצעה לפני פעולת החיפוש ייכשל. פעולות מעבר הן עקביות הדרגתית.
מידע נוסף על מדיניות ניסיון חוזר מופיע במאמר משלוח בדיוק פעם אחת.