כשלים בפרסום נגרמים בדרך כלל בגלל צווארי בקבוק בצד הלקוח, כמו מספר לא מספיק של מעבדי שירות, תקינות לקויה של השרשורים או עומס ברשת. מדיניות הניסיונות החוזרים של בעל התוכן הדיגיטלי מגדירה את מספר הפעמים ש-Pub/Sub מנסה לשלוח הודעה ואת משך הזמן בין כל ניסיון.
במסמך הזה מוסבר איך להשתמש בבקשות חוזרות עם הודעות שפורסמו בנושא.
לפני שמתחילים
לפני שמגדירים את תהליך העבודה של הפרסום, צריך לבצע את המשימות הבאות:
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות לשליחה חוזרת של בקשות להודעות בנושא, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד פרסום הודעות ב-Pub/Sub (roles/pubsub.publisher) בנושא.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
כדי ליצור או לעדכן נושאים ומינויים, צריך הרשאות נוספות.
מידע על בקשות לניסיון חוזר
הגדרות הניסיון החוזר קובעות איך ספריות הלקוח של Pub/Sub מנסות שוב לשלוח בקשות פרסום. בספריות הלקוח יש את הגדרות הניסיונות החוזרים הבאות:
- זמן קצוב לתפוגה של בקשה ראשונית: משך הזמן שבו ספריית הלקוח ממתינה להשלמת בקשת הפרסום הראשונית.
- השהיה לפני ניסיון חוזר: משך הזמן שספריית הלקוח ממתינה אחרי שהזמן הקצוב לתפוגה של בקשה חלף, לפני שהיא מנסה לשלוח שוב את הבקשה.
- זמן קצוב כולל לתפוגה: משך הזמן שאחריו ספריית הלקוח מפסיקה לנסות מחדש לשלוח בקשות פרסום.
כדי לנסות שוב לשלוח בקשות פרסום, זמן הקצוב לתפוגה של הבקשה הראשונית צריך להיות קצר יותר מהזמן הקצוב הכולל לתפוגה. לדוגמה, אם משתמשים בהשהיה מעריכית לפני ניסיון חוזר (exponential backoff), ספריות הלקוח מחשבות את הזמן הקצוב לתפוגה של הבקשה ואת העיכוב לפני ניסיון חוזר באופן הבא:
- אחרי כל בקשת פרסום, זמן הקצוב לתפוגה של הבקשה גדל לפי מכפיל הזמן הקצוב לתפוגה של הבקשה, עד לזמן הקצוב המקסימלי לתפוגה של הבקשה.
- אחרי כל ניסיון חוזר, ההשהיה של הניסיון החוזר גדלה לפי מכפיל ההשהיה של הניסיון החוזר, עד להשהיה המקסימלית של הניסיון החוזר.
ניסיון חוזר לשלוח הזמנה לצ'אט
במהלך תהליך הפרסום, יכול להיות שתראו כשלים זמניים או קבועים בפרסום. בדרך כלל לא צריך לעשות שום דבר מיוחד כדי לטפל בשגיאות זמניות, כי Pub/Sub מנסה לשלוח את ההודעות מחדש באופן אוטומטי.
שגיאה יכולה להתרחש גם כשפעולת הפרסום מצליחה, אבל תגובת הפרסום לא מתקבלת בזמן על ידי לקוח הפרסום. גם במקרה הזה, פעולת הפרסום תתבצע שוב. כתוצאה מכך, יכולות להיות שתי הודעות זהות עם מזהי הודעות שונים.
אם השגיאות נמשכות, כדאי לבצע פעולות מתאימות מחוץ לתהליך הפרסום כדי להימנע מעומס יתר על Pub/Sub.
אם הפרסום נכשל, המערכת מנסה שוב באופן אוטומטי, חוץ ממקרים שבהם השגיאות לא מצדיקות ניסיונות חוזרים. הקוד לדוגמה הזה מדגים יצירת בעל תוכן דיגיטלי עם הגדרות ניסיון חוזר בהתאמה אישית (שימו לב שלא כל ספריות הלקוח תומכות בהגדרות ניסיון חוזר בהתאמה אישית; עיינו במאמרי העזרה של ה-API בשפה שבחרתם):
C++
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C++ במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף זמין במאמרי העזרה של Pub/Sub C++ API.
C#
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub C# API.
המשך
בדוגמה הבאה נעשה שימוש בגרסה הראשית של ספריית הלקוח של Pub/Sub ב-Go (v2). אם אתם עדיין משתמשים בספרייה של גרסה 1, כדאי לעיין במדריך להעברת נתונים לגרסה 2. כאן תוכלו למצוא רשימה של דוגמאות קוד שהוצאו משימוש בגרסה 1.
לפני שתנסו את הדוגמה הזו, פעלו לפי הוראות ההגדרה של Go במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במסמכי העזר של ה-API של Pub/Sub Go.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Java API.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Node.js API.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Node.js API.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של ה-API בשפת Python של Pub/Sub.
Rust
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Rust במדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Rust API.
ניסיון חוזר של בקשות עם מפתחות סידור
נניח שיש לכם לקוח אחד שהוא בעל תוכן דיגיטלי. אתם משתמשים בספריות הלקוח של Pub/Sub כדי לפרסם את ההודעות 1, 2 ו-3 עם אותו מפתח סדר A. עכשיו נניח שהתגובה שפורסמה להודעה 1 לא מתקבלת על ידי לקוח המוציא לאור לפני שמועד היעד של ה-RPC פג. צריך לפרסם מחדש את הודעה 1. רצף ההודעות שמתקבלות על ידי לקוח המנוי הופך ל-1, 1, 2 ו-3, בהנחה שהודעה 2 מתפרסמת רק אחרי שהודעה 1 הושלמה בהצלחה. לכל הודעה שפורסמה יש מזהה הודעה משלה. מנקודת המבט של לקוח המנוי, פורסמו ארבע הודעות, כאשר לשתי הראשונות יש תוכן זהה.
גם הגדרות של אצווה יכולות לסבך את הניסיון החוזר של בקשות פרסום עם מפתחות הזמנה. ספריית הלקוח אוספת הודעות באצווה כדי לייעל את הפרסום. נמשיך עם הדוגמה הקודמת ונניח שהודעות 1 ו-2 נשלחות באצווה ביחד. האצווה הזו נשלחת לשרת כבקשה אחת. אם השרת לא מחזיר תשובה בזמן, לקוח בעל התפקיד "פרסום" מנסה שוב לשלוח את שתי ההודעות האלה. לכן, יכול להיות שלקוח המנוי יקבל את ההודעות 1, 2, 1, 2 ו-3. אם אתם משתמשים בספריית לקוח של Pub/Sub כדי לפרסם הודעות לפי הסדר ופעולת הפרסום נכשלת, השירות נכשל בפעולות הפרסום של כל ההודעות שנותרו באותו מפתח סדר. לאחר מכן, הלקוח של בעל התוכן הדיגיטלי יכול לבחור לבצע אחת מהפעולות הבאות:
מפרסמים מחדש את כל ההודעות שנכשלו לפי הסדר
פרסום מחדש של קבוצת משנה של ההודעות שנכשלו לפי הסדר
פרסום קבוצה חדשה של הודעות
אם מתרחשת שגיאה שלא ניתן לנסות שוב, ספריית הלקוח לא מפרסמת את ההודעה ומפסיקה לפרסם הודעות אחרות עם אותו מפתח סדר. לדוגמה, כשבעל תוכן דיגיטלי שולח הודעה לנושא שלא קיים, מתרחשת שגיאה שלא ניתן לנסות שוב. כדי להמשיך לפרסם הודעות עם אותו מפתח סדר, צריך להפעיל שיטה להמשך הפרסום ואז להתחיל לפרסם שוב.
בדוגמה הבאה מוסבר איך להמשיך לפרסם הודעות עם אותו מפתח סדר.
C++
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C++ במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף זמין במאמרי העזרה של Pub/Sub C++ API.
C#
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub C# API.
המשך
בדוגמה הבאה נעשה שימוש בגרסה הראשית של ספריית הלקוח של Pub/Sub ב-Go (v2). אם אתם עדיין משתמשים בספרייה של גרסה 1, כדאי לעיין במדריך להעברת נתונים לגרסה 2. כאן תוכלו למצוא רשימה של דוגמאות קוד שהוצאו משימוש בגרסה 1.
לפני שתנסו את הדוגמה הזו, פעלו לפי הוראות ההגדרה של Go במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במסמכי העזר של ה-API של Pub/Sub Go.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Java API.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Node.js API.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של ה-API בשפת Python של Pub/Sub.
Ruby
בדוגמה הבאה נעשה שימוש בגרסה 3 של ספריית הלקוח של Pub/Sub ב-Ruby. אם אתם עדיין משתמשים בספרייה v2, עיינו במדריך להעברת נתונים (מיגרציה) ל-v3. לרשימה של דוגמאות קוד ב-Ruby v2, עיינו ב דוגמאות הקוד שהוצאו משימוש.
לפני שתנסו את הדוגמה הזו, פעלו לפי הוראות ההגדרה של Ruby במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Ruby API.
Rust
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Rust במדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Rust API.
המאמרים הבאים
כדי ללמוד איך להגדיר אפשרויות פרסום מתקדמות, אפשר לעיין במאמרים הבאים: