במסמך הזה מוסבר איך לפרסם הודעות.
אפליקציה של בעל תוכן דיגיטלי יוצרת ושולחת הודעות לנושא. ב-Pub/Sub יש אפשרות של לפחות מסירה אחת של הודעה, וסדר ההודעות נשמר כמיטב היכולת למנויים קיימים.
התהליך הכללי של שליחת בקשה להצטרפות לתוכנית AdSense הוא:
- יוצרים הודעה שמכילה את הנתונים.
- שליחת בקשה לשרת Pub/Sub לפרסום ההודעה בנושא שצוין.
לפני שמתחילים
לפני שמגדירים את תהליך העבודה של הפרסום, צריך לוודא שביצעתם את המשימות הבאות:
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות לפרסום הודעות בנושא, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד פרסום הודעות ב-Pub/Sub (roles/pubsub.publisher) בנושא.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
כדי ליצור או לעדכן נושאים ומינויים, צריך הרשאות נוספות.
פורמט הודעה
הודעה מורכבת משדות עם נתוני ההודעה והמטא-נתונים שלה. צריך לציין לפחות אחד מהפרטים הבאים בהודעה:
- נתוני ההודעה
- מפתח הזמנה
- מאפיינים עם מטא-נתונים נוספים
שירות Pub/Sub מוסיף את השדות הבאים להודעה:
- מזהה הודעה ייחודי לנושא
- חותמת זמן של מועד קבלת ההודעה בשירות Pub/Sub
מידע נוסף על הודעות זמין במאמר פורמט של הודעות.
פרסום הודעות
אפשר לפרסם הודעות באמצעות מסוף Google Cloud , Google Cloud CLI, Pub/Sub API וספריות הלקוח. ספריות הלקוח יכולות לפרסם הודעות באופן אסינכרוני.
בדוגמאות הבאות מוסבר איך לפרסם הודעה בנושא.
המסוף
כדי לפרסם הודעה:
נכנסים לדף Pub/Sub topics במסוף Google Cloud .
לוחצים על מזהה הנושא.
בדף פרטי הנושא, בקטע הודעות, לוחצים על פרסום הודעה.
בשדה גוף ההודעה, מזינים את נתוני ההודעה.
לוחצים על פרסום.
gcloud
כדי לפרסם הודעה, משתמשים בפקודה gcloud pubsub topics publish:
gcloud pubsub topics publish TOPIC_ID \ --message=MESSAGE_DATA \ [--attribute=KEY="VALUE",...]
מחליפים את מה שכתוב בשדות הבאים:
- TOPIC_ID: מזהה הנושא
- MESSAGE_DATA: מחרוזת עם נתוני ההודעה
- KEY: המפתח של מאפיין ההודעה
- VALUE: הערך של המפתח של מאפיין ההודעה
REST
כדי לפרסם הודעה, שולחים בקשת POST כמו הבקשה הבאה:
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish Content-Type: application/json Authorization: Bearer $(gcloud auth application-default print-access-token)
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט של הפרויקט עם הנושא
- TOPIC_ID: מזהה הנושא
מציינים את השדות הבאים בגוף הבקשה:
{
"messages": [
{
"attributes": {
"KEY": "VALUE",
...
},
"data": "MESSAGE_DATA",
}
]
}מחליפים את מה שכתוב בשדות הבאים:
- KEY: המפתח של מאפיין ההודעה
- VALUE: הערך של המפתח של מאפיין ההודעה
- MESSAGE_DATA: מחרוזת בקידוד base64 עם נתוני ההודעה
ההודעה חייבת להכיל שדה נתונים לא ריק או לפחות מאפיין אחד.
אם הבקשה מצליחה, התגובה היא אובייקט JSON עם מזהה ההודעה. בדוגמה הבאה מוצגת תגובה עם מזהה הודעה:
{
"messageIds": [
"19916711285",
]
}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.
PHP
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של PHP במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub PHP API.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של ה-API בשפת Python של Pub/Sub.
Ruby
בדוגמה הבאה נעשה שימוש בספריית הלקוח של Ruby Pub/Sub בגרסה 3. אם אתם עדיין משתמשים בספרייה v2, כדאי לעיין במדריך להעברה ל-v3. כדי לראות רשימה של דוגמאות קוד של Ruby v2, אפשר לעיין ב דוגמאות הקוד שהוצאו משימוש.
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Ruby במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Ruby API.
חלודה
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Rust במאמר מדריך מהיר: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Rust API.
אחרי שמפרסמים הודעה, שירות Pub/Sub מחזיר את מזהה ההודעה למפרסם.
שימוש במאפיינים לפרסום הודעה
אפשר להטמיע מאפיינים מותאמים אישית כמטא-נתונים בהודעות Pub/Sub. המאפיינים משמשים כדי לספק מידע נוסף על ההודעה, כמו העדיפות, המקור או היעד שלה. אפשר להשתמש במאפיינים גם כדי לסנן הודעות במינוי.
חשוב להקפיד על ההנחיות הבאות כשמשתמשים במאפיינים בהודעות:
אפשר להוסיף עד 100 מאפיינים לכל הודעה.
המפתחות והערכים של המאפיינים חייבים להיות מסוג מחרוזת. אין קידוד נדרש.
מפתחות מאפיינים לא יכולים להתחיל ב-
googולא יכולים להיות ארוכים מ-256 בייט.הערכים של המאפיינים לא יכולים להיות גדולים מ-1,024 בייט.
סכימת ההודעה יכולה להיות מיוצגת באופן הבא:
{
"data": string,
"attributes": {
string: string,
...
},
"messageId": string,
"publishTime": string,
"orderingKey": string
}
במקרה של כפילויות בצד בעל התוכן הדיגיטלי, יכול להיות שתראו ערכים שונים של publishTime לאותה הודעה מקורית בצד הלקוח, גם אם הערך של messageId זהה.
סכימת ה-JSON של PubsubMessage מתפרסמת כחלק מהמסמכים של REST ושל RPC. אפשר להשתמש במאפיינים מותאמים אישית לחותמות זמן של אירועים.
בדוגמאות הבאות אפשר לראות איך לפרסם הודעה עם מאפיינים בנושא.
המסוף
כדי לפרסם הודעה עם מאפיינים:
נכנסים לדף Topics במסוף Google Cloud .
לוחצים על הנושא שרוצים לפרסם בו הודעות.
בדף הפרטים של הנושא, לוחצים על הודעות.
לוחצים על פרסום ההודעה.
בשדה גוף ההודעה, מזינים את נתוני ההודעה.
בקטע מאפייני ההודעה, לוחצים על הוספת מאפיין.
מזינים צמד מפתח/ערך.
מוסיפים עוד מאפיינים, אם צריך.
לוחצים על פרסום.
gcloud
gcloud pubsub topics publish my-topic --message="hello" \ --attribute="origin=gcloud-sample,username=gcp,eventTime='2021-01-01T12:00:00Z'"
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.
חלודה
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Rust במאמר מדריך מהיר: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Rust API.
שימוש במקשי הזמנה כדי לפרסם הודעה
כדי לקבל הודעות בסדר מסוים בלקוחות המנויים, צריך להגדיר את לקוחות המפרסמים כך שיפרסמו הודעות עם מפתחות סידור.
כדי להבין את הרעיון של מפתחות הזמנה, אפשר לקרוא את המאמר הזמנת הודעות.
למטה מפורטים הדברים העיקריים שחשוב לדעת לגבי הצגת הודעות לפי סדר מסוים ללקוחות של בעלי תוכן דיגיטלי:
סדר ההודעות בלקוח יחיד של בעל תוכן דיגיטלי: כשלקוח יחיד של בעל תוכן דיגיטלי מפרסם הודעות עם אותו מפתח סדר באותו אזור, לקוח המנוי מקבל את ההודעות האלה בדיוק בסדר שבו הן פורסמו. לדוגמה, אם לקוח מסוג Publisher מפרסם את ההודעות 1, 2 ו-3 עם מפתח ההזמנה A, לקוח מסוג Subscriber מקבל אותן בסדר 1, 2, 3.
סדר ההודעות בכמה לקוחות של מפרסמים: סדר ההודעות שמתקבלות אצל לקוחות של מנויים זהה לסדר שבו הן פורסמו באותו אזור, גם כשכמה לקוחות של מפרסמים משתמשים באותו מפתח סדר. עם זאת, הלקוחות של בעל התוכן הדיגיטלי לא יודעים על ההזמנה הזו.
לדוגמה, אם לקוחות של בעלי תוכן דיגיטלי X ו-Y מפרסמים הודעות עם מפתח סידור A, וההודעה של X מתקבלת על ידי Pub/Sub לפני ההודעה של Y, אז כל הלקוחות של המנויים מקבלים את ההודעה של X לפני ההודעה של Y. אם נדרש סדר הודעות קפדני בכמה לקוחות שונים של מפרסמים, הלקוחות האלה צריכים להטמיע מנגנון תיאום נוסף כדי לוודא שהם לא מפרסמים הודעות עם אותו מפתח סדר בו-זמנית. לדוגמה, אפשר להשתמש בשירות נעילה כדי לשמור על הבעלות על מפתח הזמנה בזמן הפרסום.
הזמנה באזורים שונים: האחריות למסירת משלוח חלה רק אם הפרסומים של מפתח ההזמנה נמצאים באותו אזור. אם אפליקציית המפרסם שלכם מפרסמת הודעות עם אותו מפתח סידור באזורים שונים, לא ניתן לאכוף את הסדר בין הפרסומים האלה. מנויים יכולים להתחבר לכל אזור, וההתחייבות להזמנה עדיין תקפה.
כשמריצים את האפליקציה ב- Google Cloud, היא מתחברת כברירת מחדל לנקודת הקצה של Pub/Sub באותו אזור. לכן, הפעלת האפליקציה באזור יחיד ב-Google Cloud בדרך כלל מבטיחה אינטראקציה עם אזור יחיד.
כשמריצים את אפליקציית בעל התוכן הדיגיטלי מחוץ ל-Google Cloud או בכמה אזורים, אפשר להבטיח שהחיבור יהיה לאזור יחיד באמצעות נקודת קצה (endpoint) למיקום כשמגדירים את לקוח Pub/Sub. כל נקודות הקצה של המיקומים ב-Pub/Sub מצביעות על אזורים יחידים. מידע נוסף על נקודות קצה (endpoint) לפי מיקום זמין במאמר נקודות קצה (endpoint) של Pub/Sub. רשימה של כל נקודות הקצה למיקום ב-Pub/Sub מופיעה במאמר רשימה של נקודות קצה למיקום.
כשלים בפרסום: אם הפרסום עם מפתח הזמנה נכשל, גם הודעות בתור עם אותו מפתח הזמנה ב-Publisher נכשלות, כולל בקשות פרסום עתידיות עם מפתח ההזמנה הזה. במקרים כאלה, צריך לחדש את הפרסום באמצעות מפתחות הזמנה. דוגמה לחידוש פעולת הפרסום מופיעה במאמר ניסיון חוזר של בקשות עם מפתחות הזמנה.
אפשר לפרסם הודעות עם מפתחות סידור באמצעות מסוף Google Cloud , Google Cloud CLI, Pub/Sub API או ספריות הלקוח.
המסוף
כדי לפרסם הודעה עם מאפיינים:
נכנסים לדף Topics במסוף Google Cloud .
לוחצים על הנושא שרוצים לפרסם בו הודעות.
בדף הפרטים של הנושא, לוחצים על הודעות.
לוחצים על פרסום ההודעה.
בשדה גוף ההודעה, מזינים את נתוני ההודעה.
בשדה Message ordering (סדר ההודעות), מזינים מפתח סדר.
לוחצים על פרסום.
gcloud
כדי לפרסם הודעה עם מפתח לסידור, משתמשים בפקודה gcloud pubsub topics publish עם הדגל --ordering-key:
gcloud pubsub topics publish TOPIC_ID \ --message=MESSAGE_DATA \ --ordering-key=ORDERING_KEY
מחליפים את מה שכתוב בשדות הבאים:
- TOPIC_ID: מזהה הנושא
- MESSAGE_DATA: מחרוזת עם נתוני ההודעה
- ORDERING_KEY: מחרוזת עם מפתח סידור
REST
כדי לפרסם הודעה עם מפתח סדר, שולחים בקשת POST כמו הבקשה הבאה:
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish Content-Type: application/json Authorization: Bearer $(gcloud auth application-default print-access-token)
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט של הפרויקט עם הנושא
- TOPIC_ID: מזהה הנושא
מציינים את השדות הבאים בגוף הבקשה:
{
"messages": [
{
"attributes": {
"KEY": "VALUE",
...
},
"data": "MESSAGE_DATA",
"ordering_key": "ORDERING_KEY",
}
]
}מחליפים את מה שכתוב בשדות הבאים:
- KEY: המפתח של מאפיין ההודעה
- VALUE: הערך של המפתח של מאפיין ההודעה
- MESSAGE_DATA: מחרוזת בקידוד base64 עם נתוני ההודעה
- ORDERING_KEY: מחרוזת עם מפתח סידור
ההודעה חייבת להכיל שדה נתונים לא ריק או לפחות מאפיין אחד.
אם הבקשה מצליחה, התגובה היא אובייקט JSON עם מזהה ההודעה. בדוגמה הבאה מוצגת תגובה עם מזהה הודעה:
{
"messageIds": [
"19916711285",
]
}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.
חלודה
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Rust במאמר מדריך מהיר: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Rust API.
מעקב אחרי בעל אפליקציה
ב-Cloud Monitoring יש מספר מדדים למעקב אחרי נושאים.
כדי לעקוב אחרי נושא ולשמור על תקינות האתר, אפשר לעיין במאמר בנושא שמירה על תקינות האתר.
המאמרים הבאים
כדי להגביל את המיקומים שבהם Pub/Sub מאחסן נתוני הודעות, אפשר לעיין במאמר בנושא הגבלת מיקומי משאבים ב-Pub/Sub.
מידע על פרסום הודעות עם סכימה מופיע במאמר סקירה כללית של סכימות.
כדי ללמוד איך להגדיר אפשרויות משלוח מתקדמות, אפשר לעיין במאמרים הבאים: