מדיניות הניסיונות החוזרים לחיוב מינוי

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

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

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

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

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

כדי לקבל את ההרשאות שנדרשות לניהול נושאים ומינויים, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM ‏Pub/Sub Editor ‏(roles/pubsub.editor) בפרויקט. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

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

סוגים של מדיניות ניסיונות חוזרים

כשיוצרים ומגדירים מינוי בפעם הראשונה, אפשר לבחור להשתמש באחת ממדיניות הניסיון החוזר הבאה: מסירה חוזרת מיידית או השהיה מעריכית לפני ניסיון חוזר (exponential backoff). כברירת מחדל, המינויים משתמשים באפשרות של מסירה חוזרת מיידית.

מסירה חוזרת מיידית

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

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

השהיה מעריכית לפני ניסיון חוזר (exponential backoff)

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

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

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

  • השהיה מעריכית לפני ניסיון חוזר מופעלת בפעולות הבאות:
    • כשמתקבל אישור שלילי.
    • כשתוקף האישור של הודעה פג.
  • השהיה מעריכית לפני ניסיון חוזר (exponential backoff) חלה רק על כל הודעה בנפרד, ולא על כל ההודעות במינוי (גלובלי).
  • בזמן השימוש בהשהיה מעריכית לפני ניסיון חוזר (exponential backoff), Pub/Sub ממשיך למסור הודעות אחרות, גם אם הודעות קודמות קיבלו אישורי קבלה שליליים (אלא אם אתם משתמשים במסירת הודעות מסודרת).

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

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

אם אתם צריכים לתזמן מסירות, כדאי להשתמש ב-Cloud Tasks.

הגדרת השהיה מעריכית לפני ניסיון חוזר (exponential backoff)

המסוף

כשיוצרים מינוי חדש, אפשר להגדיר מדיניות ניסיון חוזר עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff) באמצעות השלבים הבאים:

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

לדף המינויים

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

  2. כותבים שם בשדה Subscription ID.

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

  1. בוחרים נושא מהתפריט הנפתח או יוצרים נושא חדש.

המינוי מקבל הודעות מהנושא.

  1. בוחרים סוג משלוח.

  2. בקטע Retry policy (מדיניות ניסיון חוזר), בוחרים באפשרות Retry after exponential backoff (ניסיון חוזר אחרי השהיה מעריכית לפני ניסיון חוזר).

  3. מזינים ערך של זמן השהיה מינימלי וזמן השהיה מקסימלי בין 0 ל-600 שניות.

ערכי ברירת המחדל הם 10 שניות להשהיה המינימלית לפני ניסיון חוזר ו-600 שניות להשהיה המקסימלית לפני ניסיון חוזר.

  1. לוחצים על יצירה.

gcloud

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

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
  --topic=TOPIC_ID \
  --min-retry-delay=MIN_RETRY_DELAY \
  --max-retry-delay=MAX_RETRY_DELAY

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

  • SUBSCRIPTION_ID: מזהה ייחודי של המינוי.
  • TOPIC_ID: המזהה של הנושא שאליו רוצים לצרף את המינוי.
  • MIN_RETRY_DELAY: השהיית ה-backoff המינימלית למינוי.
  • MAX_RETRY_DELAY: ההשהיה המקסימלית של הניסיון החוזר למינוי.

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