במאמר הזה מוסבר איך לשייך סכימות לנושאים ב-Pub/Sub.
לפני שמתחילים
- הסבר על סכימות של Pub/Sub
- יוצרים סכימה.
התפקידים וההרשאות הנדרשים
כדי לקבל את ההרשאות שנדרשות לשיוך ולניהול של סכימות, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד עריכה ב-Pub/Sub (roles/pubsub.editor) בפרויקט.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקיד המוגדר מראש הזה מכיל את ההרשאות שנדרשות לשיוך סכימות ולניהול שלהן. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי לשייך סכימות ולנהל אותן, נדרשות ההרשאות הבאות:
-
יצירת סכימה:
pubsub.schemas.create -
צירוף סכימה לנושא:
pubsub.schemas.attach -
אישור שינוי בסכימה:
pubsub.schemas.commit -
מחיקת סכימה או עדכון של סכימה:
pubsub.schemas.delete -
קבלת סכימה או עדכונים בסכימה:
pubsub.schemas.get -
רשימת סכימות:
pubsub.schemas.list -
רשימת שינויים בסכימה:
pubsub.schemas.listRevisions -
החזרה של סכימה למצב קודם:
pubsub.schemas.rollback -
כדי לאמת הודעה:
pubsub.schemas.validate -
קבלת מדיניות IAM עבור סכימה:
pubsub.schemas.getIamPolicy -
מגדירים את מדיניות IAM לסכימה:
pubsub.schemas.setIamPolicy
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
אתם יכולים להעניק תפקידים והרשאות לחשבונות ראשיים כמו משתמשים, קבוצות, דומיינים או חשבונות שירות. אפשר ליצור סכימה בפרויקט אחד ולצרף אותה לנושא שנמצא בפרויקט אחר. מוודאים שיש לכם את ההרשאות הנדרשות לכל פרויקט.
הנחיות לשיוך סכימה לנושא
אפשר לשייך סכימה לנושא כשיוצרים או עורכים נושא. אלה ההנחיות לשיוך סכימה לנושא:
אפשר לשייך סכימה לנושא אחד או יותר.
אחרי שמשייכים סכימה לנושא, כל הודעה שהנושא מקבל מהמוציאים לאור חייבת להיות בהתאם לסכימה הזו.
כשמשייכים סכימה לנושא, צריך לציין גם את הקידוד של ההודעות שיפורסמו כ-
BINARYאו כ-JSON. אם משתמשים ב-JSON עם סכימת Avro, חשוב לשים לב לכללי הקידוד של איחודים.אם לסכימה שמשויכת לנושא יש עדכונים, ההודעות צריכות להתאים לקידוד ולעבור אימות מול עדכון בטווח הזמין. אם הם לא מאומתים, ההודעה לא מתפרסמת.
המערכת מנסה להשתמש בגרסאות לפי סדר כרונולוגי הפוך שמבוסס על זמן היצירה. כדי ליצור גרסה מתוקנת של סכימה, אפשר לעיין במאמר בנושא אישור גרסה מתוקנת של סכימה.
לוגיקת אימות של סכימת הודעות
כשמשייכים סכימה לנושא, ואם לסכימה יש גרסאות קודמות, אפשר לציין טווח משנה של גרסאות קודמות לשימוש. אם לא מציינים טווח, המערכת משתמשת בטווח כולו לצורך אימות.
אם לא מציינים את מספר התיקון כהתיקון הראשון שמותר, המערכת משתמשת בתיקון הקיים הכי ישן של הסכימה לצורך אימות. אם לא מציינים גרסה כהגרסה האחרונה המותרת, המערכת משתמשת בגרסה הקיימת החדשה ביותר של הסכימה.
ניקח לדוגמה סכימה S שמצורפת לנושא T.
לסכימה S יש את מזהי הגרסאות A,B, C ו-D שנוצרו לפי הסדר,
כאשר A היא הגרסה הראשונה או הכי ישנה. אף אחת מהסכימות לא זהה לסכימה אחרת או לביטול שינויים בסכימה קיימת.
אם מגדירים רק את השדה First revision allowed כ-
B, הודעות שתואמות רק לסכימהAיידחו, אבל הודעות שתואמות לסכימותB,Cו-Dיתקבלו.אם מגדירים רק את השדה Last revision allowed (הגרסה האחרונה המותרת) כ-
C, המערכת תקבל הודעות שתואמות לסכימותA,Bו-C, ותדחה הודעות שתואמות רק לסכימהD.אם מגדירים את שני השדות First revision allowed כ-
Bואת Last revision allowed כ-C, המערכת מקבלת הודעות שתואמות לסכימותBו-C.אפשר גם להגדיר את הגרסה הראשונה והאחרונה לאותו מזהה גרסה. במקרה כזה, רק הודעות שתואמות לגרסה הזו יתקבלו.
יצירה ושיוך של סכימה כשיוצרים נושא
אפשר ליצור נושא עם סכימה באמצעות מסוף Google Cloud , ה-CLI של gcloud, Pub/Sub API או ספריות הלקוח ב-Cloud.
המסוף
נכנסים לדף Pub/Sub topics במסוף Google Cloud .
לוחצים על יצירת נושא.
בשדה Topic ID (מזהה הנושא), מזינים מזהה לנושא.
מסמנים את התיבה שימוש בסכימה.
משאירים את הגדרות ברירת המחדל בשאר השדות.
אתם יכולים ליצור סכימה או להשתמש בסכימה קיימת.
אם אתם יוצרים סכימה, פועלים לפי השלבים הבאים: `
- בקטע Select a Pub/Sub schema, בוחרים באפשרות Create a new schema.
הדף Create schema (יצירת סכימה) מוצג בכרטיסייה משנית.
פועלים לפי השלבים במאמר בנושא יצירת סכימה.
חוזרים לכרטיסייה יצירת נושא ולוחצים על רענון.
מחפשים את הסכימה בשדה Select a Pub/Sub schema.
בוחרים את קידוד ההודעה כ-JSON או כ-Binary.
לסכימה שיצרתם יש מזהה גרסה. אפשר ליצור עדכונים נוספים לסכימה, כמו שמתואר במאמר בנושא אישור עדכון לסכימה.
אם אתם משייכים סכימה שכבר יצרתם, פועלים לפי השלבים הבאים:
בקטע Select a Pub/Sub schema, בוחרים סכימה קיימת.
בוחרים את קידוד ההודעה כ-JSON או כ-Binary.
אופציונלי: אם לסכימה שנבחרה יש גרסאות, בתפריטים הנפתחים של הגרסה הראשונה המותרת והגרסה האחרונה המותרת בוחרים את הגרסאות הרצויות בשדה טווח הגרסאות.
אתם יכולים לציין את שני השדות, לציין רק אחד מהם או להשאיר את הגדרות ברירת המחדל בהתאם לדרישות שלכם.
משאירים את הגדרות ברירת המחדל בשאר השדות.
לוחצים על יצירה כדי לשמור את הנושא ולהקצות אותו לסכימה שנבחרה.
gcloud
כדי ליצור נושא שמוקצה לו סכימה שנוצרה קודם, מריצים את הפקודה gcloud pubsub topics create:
gcloud pubsub topics create TOPIC_ID \ --message-encoding=ENCODING_TYPE \ --schema=SCHEMA_ID \ --first-revision-id=FIRST_REVISION_ID \ --last-revision-id=LAST_REVISION_ID \
כאשר:
- TOPIC_ID הוא המזהה של הנושא שאתם יוצרים.
- ENCODING_TYPE הוא הקידוד של ההודעות שאומתו מול הסכימה. הערך הזה צריך להיות
JSONאוBINARY. - SCHEMA_ID הוא המזהה של סכימה קיימת.
- FIRST_REVISION_ID הוא המזהה של הגרסה הכי ישנה שרוצים לבצע אימות מולה.
- LAST_REVISION_ID הוא המזהה של הגרסה העדכנית ביותר שצריך לאמת.
המאפיינים --first-revision-id ו---last-revision-id הם אופציונליים.
אפשר גם להקצות סכימה מפרויקט אחר של Google Cloud :
gcloud pubsub topics create TOPIC_ID \ --message-encoding=ENCODING_TYPE \ --schema=SCHEMA_ID \ --schema-project=SCHEMA_PROJECT \ --project=TOPIC_PROJECT
כאשר:
- SCHEMA_PROJECT הוא מזהה הפרויקט של Google Cloud הפרויקט של הסכימה.
- TOPIC_PROJECT הוא מזהה הפרויקט של הפרויקט Google Cloud בנושא.
REST
כדי ליצור נושא, משתמשים בשיטה projects.topics.create:
בקשה:
הבקשה צריכה להיות מאומתת באמצעות אסימון גישה בכותרת Authorization. כדי לקבל אסימון גישה ל-Application Default Credentials הנוכחיים: gcloud auth application-default print-access-token.
PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID Authorization: Bearer ACCESS_TOKEN
גוף הבקשה:
{ "schemaSettings": { "schema": "SCHEMA_NAME", "encoding": "ENCODING_TYPE" "firstRevisionId": "FIRST_REVISION_ID" "lastRevisionId": "LAST_REVISION_ID" } }
כאשר:
- PROJECT_ID הוא מזהה הפרויקט.
- מספר הנושא שלך הוא TOPIC_ID.
- SCHEMA_NAME הוא שם הסכימה שצריך לאמת את ההודעות שמתפרסמות מולה. הפורמט הוא:
projects/PROJECT_ID/schemas/SCHEMA_ID. - ENCODING_TYPE הוא הקידוד של ההודעות שאומתו מול הסכימה. הערך חייב להיות
JSONאוBINARY. - FIRST_REVISION_ID הוא המזהה של הגרסה הכי ישנה שרוצים לבצע אימות מולה.
- LAST_REVISION_ID הוא המזהה של הגרסה העדכנית ביותר שצריך לאמת.
המאפיינים firstRevisionId ו-lastRevisionId הם אופציונליים.
תשובה:
{ "name": "projects/PROJECT_ID/topics/TOPIC_ID", "schemaSettings": { "schema": "SCHEMA_NAME", "encoding": "ENCODING_TYPE" "firstRevisionId": "FIRST_REVISION_ID" "lastRevisionId": "LAST_REVISION_ID" } }
אם לא מציינים את firstRevisionId ואת lastRevisionId בבקשה, הם לא נכללים בה.
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
בדוגמה הבאה נעשה שימוש בספריית הלקוח של Pub/Sub ב-Ruby, גרסה 3. אם אתם עדיין משתמשים בספרייה v2, כדאי לעיין במדריך להעברה לגרסה v3. כדי לראות רשימה של דוגמאות קוד של Ruby v2, אפשר לעיין ב דוגמאות הקוד שהוצאו משימוש.
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Ruby במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Ruby API.
עריכת סכימה שמשויכת לנושא
אפשר לערוך נושא כדי לצרף סכימה, להסיר סכימה או לעדכן את טווח הגרסאות שמשמש לאימות הודעות. באופן כללי, אם אתם מתכננים לבצע שינויים בסכימה שבשימוש, אתם יכולים לשמור גרסה חדשה ולעדכן את טווח הגרסאות שמשמשות לנושא.
אפשר לערוך סכימה שמשויכת לנושא באמצעותGoogle Cloud המסוף, ה-CLI של gcloud, Pub/Sub API או ספריות הלקוח ב-Cloud.
המסוף
נכנסים לדף Pub/Sub topics במסוף Google Cloud .
לוחצים על Topic ID של נושא.
בדף הפרטים של הנושא, לוחצים על עריכה.
אפשר לבצע את השינויים הבאים בסכימה.
יכול להיות שיחלפו כמה דקות עד שהשינויים יתעדכנו.
אם רוצים להסיר את הסכימה מהנושא, בדף עריכת נושא מבטלים את הסימון של התיבה שימוש בסכימה.
אם רוצים לשנות את הסכימה, בקטע סכימה, בוחרים את שם הסכימה.
מעדכנים את שאר השדות לפי הצורך.
- אם רוצים לעדכן את טווח הגרסאות, בתפריטים הנפתחים הגרסה הראשונה שמותרת והגרסה האחרונה שמותרת בוחרים את הגרסאות הרצויות בטווח הגרסאות.
אתם יכולים לציין את שני השדות, לציין רק אחד מהם או להשאיר את הגדרות ברירת המחדל בהתאם לדרישות שלכם.
לוחצים על עדכון כדי לשמור את השינויים.
gcloud
gcloud pubsub topics update TOPIC_ID \ --message-encoding=ENCODING_TYPE \ --schema=SCHEMA_NAME \ --first-revision-id=FIRST_REVISION_ID \ --last-revision-id=LAST_REVISION_ID \
כאשר:
- TOPIC_ID הוא המזהה של הנושא שאתם יוצרים.
- ENCODING_TYPE הוא הקידוד של ההודעות שאומתו מול הסכימה. הערך הזה צריך להיות
JSONאוBINARY. - SCHEMA_NAME הוא השם של סכימה קיימת.
- FIRST_REVISION_ID הוא המזהה של הגרסה הכי ישנה שרוצים לאמת.
- LAST_REVISION_ID הוא המזהה של הגרסה העדכנית ביותר שצריך לאמת.
המאפיינים --first-revision-id ו---last-revision-id הם אופציונליים.
REST
כדי לעדכן נושא, משתמשים בשיטה projects.topics.patch:
בקשה:
הבקשה צריכה להיות מאומתת באמצעות אסימון גישה בכותרת Authorization. כדי לקבל אסימון גישה ל-Application Default Credentials הנוכחיים: gcloud auth application-default print-access-token.
PATCH https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID Authorization: Bearer ACCESS_TOKEN
גוף הבקשה:
{ "schemaSettings": { "schema": "SCHEMA_NAME", "encoding": "ENCODING_TYPE" "firstRevisionId": "FIRST_REVISION_ID" "lastRevisionId": "LAST_REVISION_ID" "update_mask": } }
כאשר:
- PROJECT_ID הוא מזהה הפרויקט.
- מספר הנושא שלך הוא TOPIC_ID.
- SCHEMA_NAME הוא שם הסכימה שצריך לאמת את ההודעות שמתפרסמות מולה. הפורמט הוא:
projects/PROJECT_ID/schemas/SCHEMA_ID. - ENCODING_TYPE הוא הקידוד של ההודעות שאומתו מול הסכימה. הערך חייב להיות
JSONאוBINARY. - FIRST_REVISION_ID הוא המזהה של הגרסה הכי ישנה שרוצים לאמת.
- LAST_REVISION_ID הוא המזהה של הגרסה העדכנית ביותר שצריך לאמת.
המאפיינים firstRevisionId ו-lastRevisionId הם אופציונליים.
תשובה:
{ "name": "projects/PROJECT_ID/topics/TOPIC_ID", "schemaSettings": { "schema": "SCHEMA_NAME", "encoding": "ENCODING_TYPE" "firstRevisionId": "FIRST_REVISION_ID" "lastRevisionId": "LAST_REVISION_ID" } }
אחרי העדכון, הערכים של firstRevisionId ושל lastRevisionId לא מוגדרים.
C++
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C++ במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף זמין במאמרי העזרה של Pub/Sub C++ API.
המשך
בדוגמה הבאה נעשה שימוש בגרסה הראשית של ספריית הלקוח Go Pub/Sub (v2). אם אתם עדיין משתמשים בספרייה v1, כדאי לעיין במדריך להעברה לגרסה v2. כדי לראות רשימה של דוגמאות קוד מגרסה 1, אפשר לעיין ב דוגמאות הקוד שהוצאו משימוש.
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Go API.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Java API.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של ה-API בשפת Python של Pub/Sub.