במדריך הזה מוסבר איך להגדיר קבוצה של אפליקציות שמתקשרות ביניהן באמצעות שליחת הודעות דרך Pub/Sub, במקום באמצעות בקשות RPC סינכרוניות. הפרדה בין אפליקציות מאפשרת:
- שיפור היציבות של האפליקציות
- יכול לפשט את הפיתוח
לדוגמה, הצד המתקשר (בעל האתר) לא צריך שהצד המקבל (המשתמש) יהיה מחובר וזמין. בעל התוכן הדיגיטלי שולח הודעה ל-Pub/Sub. בעל התוכן הדיגיטלי לא צריך לדעת אילו אפליקציות של מנויים צריכות לקבל את ההודעה וכמה כאלה יש. כתוצאה מכך, אפשר להסתמך על השירות שיעביר את ההודעה לאחת או יותר מהאפליקציות של המנויים בכל פעם שהן זמינות.
סקירה כללית של המערכת
במדריך הזה תתחילו למלא בקשה להצטרפות לתוכנית השותפים של Google, ותשלחו את ההודעה Hello, World! לשני מנויים באמצעות תקשורת אחד לרבים, כמו שמוצג בתרשים הבא:
שתי האפליקציות של המנויים משתמשות באותו קוד, אבל מתחילות בזמנים שונים. התהליך הזה מדגים איך Pub/Sub מאפשר תקשורת אסינכרונית. כדי לבנות את המערכת הזו, צריך לבצע את השלבים הבאים:
- יוצרים חשבון שירות ב-IAM שהאפליקציות משתמשות בו לאימות.
- מגדירים הרשאות IAM.
- יוצרים נושא Pub/Sub ומינוי.
- מפעילים שלוש אפליקציות עצמאיות: אפליקציה אחת של בעל תוכן דיגיטלי ושתי אפליקציות של מנויים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Pub/Sub API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable pubsub.googleapis.com
-
יוצרים פרטי כניסה לאימות מקומי עבור חשבון המשתמש:
gcloud auth application-default login
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/pubsub.publisher, roles/pubsub.subscribergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Pub/Sub API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable pubsub.googleapis.com
-
יוצרים פרטי כניסה לאימות מקומי עבור חשבון המשתמש:
gcloud auth application-default login
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/pubsub.publisher, roles/pubsub.subscribergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
התקנת Python
במדריך הזה נעשה שימוש בספריות הלקוח של Pub/Sub, שנדרשת בהן Python בגרסה 3.7 ואילך. משלימים את ההוראות להתקנת Python.
הגדרת פרויקט Pub/Sub
כדי לנהל את זרימת ההודעות בין אפליקציות לפרסום ולאפליקציות להרשמה, יוצרים נושא ושתי מינויים שונים.
יוצרים נושא Pub/Sub
תכין לי נושא עם המזהה hello_topic:
gcloud pubsub topics create hello_topic
יצירת מינויים ל-Pub/Sub
יוצרים שני מינויים ומצרפים אותם לנושא.
המינויים האלה הם מינויי StreamingPull, שהם סוג של מינויי pull.
מינוי 1
יוצרים מינוי עם המזהה sub_one ומצרפים אותו ל-hello_topic.
gcloud pubsub subscriptions create sub_one --topic=hello_topic
מינוי 2
יוצרים מינוי עם המזהה sub_two ומצרפים אותו ל-hello_topic.
gcloud pubsub subscriptions create sub_two --topic=hello_topic
יצירת מערכת 'אחד לרבים'
הורדת הקוד של בעל האתר והקוד של המנוי
מורידים את קובצי ה-Python של Pub/Sub שנדרשים למדריך הזה.
git clone https://github.com/googleapis/python-pubsub.git
לפני שממשיכים, צריך לסגור את כל המסופים הפתוחים.
הגדרת שלושה מסופים
מפעילים טרמינל אחד לכל אפליקציה במדריך (אפליקציה אחת של בעל תוכן דיגיטלי ושתי אפליקציות של מנויים). לנוחותכם, במדריך הזה נשתמש במונחים הבאים לתיאור המסופים האלה:
- טרמינל publisher
- מסוף sub_one
- מסוף sub_two
בטרמינל של המוציא לאור, יוצרים סביבה וירטואלית של Python בשם
pyenv-qsומפעילים אותה.Bash
python -m venv pyenv-qs source pyenv-qs/bin/activate
PowerShell
py -m venv pyenv-qs .\pyenv-qs\Scripts\activate
בטרמינלים sub_one ו-sub_two, מריצים את הפקודה הבאה:
Bash
source pyenv-qs/bin/activate
PowerShell
.\pyenv-qs\Scripts\activate
אחרי שמריצים את פקודת ההפעלה, בשורת הפקודה מופיע הערך
(pyenv-qs) $.במסוף של השולח, מתקינים את ספריית הלקוח של Python ל-Pub/Sub באמצעות
pip:python -m pip install --upgrade google-cloud-pubsub
בכל שלושת הטרמינלים, מגדירים משתנה סביבה עם מזהה הפרויקט הנוכחי. הפקודה הזו ב-gcloud קובעת את מזהה הפרויקט שבחרתם ומגדירה אותו כמשתנה:
Bash
export PROJECT=`gcloud config get-value project`
PowerShell
$env:PROJECT=$(gcloud config get-value project)
בכל שלושת חלונות הטרמינל, עוברים לנתיב הפרויקט שמכיל את הקוד לדוגמה.
cd python-pubsub/samples/snippets/quickstart/
מפעילים את האפליקציות ומתבוננים בזרימת ההודעות
הפעלת האפליקציה של מינוי 1
בטרמינל sub_one, מפעילים את Subscriber 1:
Bash
python sub.py $PROJECT sub_one
PowerShell
py sub.py $env:PROJECT sub_one
אחרי ההפעלה, האפליקציה הזו פותחת חיבור סטרימינג דו-כיווני עם השרת. ההודעות מועברות בזרם ב-Pub/Sub.

הגשת בקשה להצטרפות לתוכנית
במסוף המוציא לאור, מפעילים את אפליקציית המוציא לאור:
Bash
python pub.py $PROJECT hello_topic
PowerShell
py pub.py $env:PROJECT hello_topic
אחרי שהאפליקציה של בעל התוכן הדיגיטלי מתחילה, מערכת Pub/Sub מבצעת את הפעולות הבאות:
אפליקציית המוציא לאור שולחת הודעה מסוג Hello, World! ל-Pub/Sub בלי לדעת על מינויים קיימים. השרת גם מקצה מזהה להודעה.
האפליקציה Subscriber 1 מקבלת את ההודעה 'Hello World', מדפיסה אותה ושולחת אישור ל-Pub/Sub.
אפליקציית Publisher מדפיסה את האישור. האישור הזה מודיע ל-Pub/Sub שההודעה עברה עיבוד בהצלחה ואין צורך לשלוח אותה מחדש למנוי sub_one הזה או למנוי אחר.
המערכת של Pub/Sub מסירה את ההודעה מ-sub_one.

הפעלת האפליקציה Subscriber 2
בטרמינל sub_two, מפעילים את Subscriber 2 (מינוי 2):
Bash
python sub.py $PROJECT sub_two
PowerShell
py sub.py $env:PROJECT sub_two
המנוי הזה מקבל הודעות שנשלחות למינוי sub_two.
מנוי 2 משתמש מחדש בסקריפט sub.py. ההבדל הוא שהמינוי של Subscriber
2 מתחיל רק אחרי שה-Publisher שולח את ההודעה לנושא ולמינויים. אם המוציא לאור מתקשר ישירות אל הנמען 2, אפליקציית הפרסום צריכה להמתין עד שהנמען 2 יתחבר או שהיא תפסיק לפעול בגלל חוסר תגובה. מערכת Pub/Sub מנהלת את התהליך הזה על ידי שמירת ההודעה עבור מנוי 2.

עכשיו אפשר להתחיל לפתח באמצעות Pub/Sub.
איך היה?
בדף התמיכה של Pub/Sub אפשר למצוא משאבים וקישורים נוספים.
הסרת המשאבים
- מפסיקים את כל האפליקציות הפעילות.
- מוחקים את ספריית קוד הדוגמה מהסביבה המקומית.
למחוק את הנושא.
gcloud pubsub topics delete hello_topic
מוחקים את המינויים.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
משביתים את פרויקט ההדרכה בקטע IAM & admin במסוף Google Cloud .
-
אם תרצו, תוכלו לבטל את פרטי הכניסה שיצרתם ולמחוק את הקובץ המקומי של פרטי הכניסה.
gcloud auth application-default revoke
-
אם רוצים, מבטלים את פרטי הכניסה של ה-CLI של gcloud.
gcloud auth revoke
המאמרים הבאים
הנה כמה דברים שאפשר לנסות:
מעיינים בקוד של
pub.pyושלsub.pyבמדריך, ומעיינים בדוגמאות אחרות של Pub/Sub ב-GitHub. כתרגיל, צריך ליצור גרסה שלpub.pyשמפרסמת את השעה המקומית בכל שנייה.באמצעות מינויים לדחיפה, אפשר לקבל הודעות שמפעילות נקודות קצה של App Engine או Cloud Functions.
אפשר לשמוע ולראות מחדש הודעות שאושרו בעבר באמצעות הפעלה מחדש. כברירת מחדל, מערכת Pub/Sub מסירה הודעות שאושר שהן התקבלו מהמינויים. לדוגמה, במדריך הזה לא תוכלו להריץ מחדש את
sub.pyכדי לקבל שוב את ההודעה Hello, World!. תכונת ההפעלה מחדש מאפשרת להגדיר מינויים כדי לקבל הודעות אחרי שהן אושרו.תחילת העבודה עם ספריות לקוח בשפות אחרות