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