במאמר הזה מוסבר איך לשייך סכימות לנושאים ב-Pub/Sub.
לפני שמתחילים
- הסבר על סכימות של Pub/Sub.
- יוצרים סכימה.
תפקידים והרשאות נדרשים
כדי לקבל את ההרשאות שנדרשות לשיוך ולניהול של סכימות, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד עריכה ב-Pub/Sub (roles/pubsub.editor) בפרויקט.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקיד המוגדר מראש הזה מכיל את ההרשאות שנדרשות לשיוך סכימות ולניהול שלהן. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי לשייך סכימות ולנהל אותן, נדרשות ההרשאות הבאות:
-
יצירת סכימה:
pubsub.schemas.create -
צירוף סכימה לנושא:
pubsub.schemas.attach -
ביצוע Commit של גרסת סכימה:
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 reference documentation.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף זמין במאמר Pub/Sub Node.js API reference documentation.
PHP
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של PHP במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף זמין במאמר מאמרי העזרה של ה-API של Pub/Sub PHP.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף זמין במאמרי העזרה של Pub/Sub Python API.
Ruby
בדוגמה הבאה נעשה שימוש בספריית הלקוח של Ruby Pub/Sub בגרסה 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 במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף זמין במאמרי העזרה של Pub/Sub Python API.