כדי לפתח ולבדוק את האפליקציה באופן מקומי, אפשר להשתמש באמולטור Pub/Sub, שמספק אמולציה מקומית של שירות הייצור של Pub/Sub. מריצים את האמולטור של Pub/Sub באמצעות Google Cloud CLI.
כדי להריץ את האפליקציה באמולטור, קודם מפעילים את האמולטור ומגדירים את משתני הסביבה. האפליקציה צריכה לתקשר עם האמולטור במקום עם שירות Pub/Sub בסביבת הייצור. המשאבים שנוצרו וההודעות שפורסמו באמולטור נשמרים למשך משך החיים של סשן האמולטור.
לפני שמתחילים
לפני שמשתמשים באמולטור Pub/Sub, צריך להשלים את התנאים המוקדמים הבאים:
מגדירים סביבת פיתוח בשפת Python.
מתקינים JDK.
מתקינים את Google Cloud CLI.
בניית אפליקציה באמצעות ספריות הלקוח ב-Cloud.
התקנת האמולטור
מתקינים את האמולטור משורת הפקודה:
gcloud components install pubsub-emulator gcloud components update
התקנת האמולטור כקובץ אימג' של קונטיינר
כדי להתקין ולהריץ את האמולטור כקונטיינר, מורידים ומתקינים את קובץ אימג' של Docker של gCloud.
הפעלת האמולטור
מפעילים את האמולטור על ידי הפעלת pubsub start משורת פקודה. לפני שמריצים את הפקודה, מחליפים את PUBSUB_PROJECT_ID במחרוזת שלCloud de Confiance מזהה פרויקט תקף. המחרוזת לא צריכה לייצג פרויקט אמיתי כי האמולטור של Pub/Sub פועל באופן מקומי. Cloud de Confiance
gcloud beta emulators pubsub start --project=PUBSUB_PROJECT_ID [options]
gcloud beta emulators pubsub start
רשימה מלאה של הדגלים
אחרי שמפעילים את האמולטור, מוצגת הודעה שדומה להודעה הבאה:
... [pubsub] This is the Pub/Sub fake. [pubsub] Implementation may be incomplete or differ from the real system. ... [pubsub] INFO: Server started, listening on 8085
ההודעה הזו מציינת ששרת Pub/Sub פועל בנקודת הקצה של האמולטור במחשב המקומי שלכם במקום בנקודת הקצה Cloud de Confiance by S3NS . כל הפעולות מתבצעות באופן מקומי, כולל הפעולות הבאות:
- יצירת נושא או מינוי
- הוצאה לאור
- הרשמה
הגדרת משתני סביבה
אחרי שמפעילים את האמולטור, צריך להגדיר את משתני הסביבה כדי שהאפליקציה תתחבר לאמולטור במקום ל-Pub/Sub. מגדירים את משתני הסביבה האלה באותו מחשב שבו מריצים את האפליקציה.
צריך להגדיר את משתני הסביבה בכל פעם שמפעילים את האמולטור. משתני הסביבה תלויים במספרי יציאות שמוקצים באופן דינמי, ויכולים להשתנות כשמפעילים מחדש את האמולטור.
הגדרה אוטומטית של המשתנים
אם האפליקציה והאמולטור פועלים באותה מכונה, אפשר להגדיר את משתני הסביבה באופן אוטומטי:
Linux / macOS
מריצים את הפקודה env-init באמצעות החלפת פקודות:
$(gcloud beta emulators pubsub env-init)
Windows
יצירה והרצה של קובץ אצווה באמצעות פלט מ-env-init:
gcloud beta emulators pubsub env-init > set_vars.cmd && set_vars.cmd
האפליקציה שלכם תתחבר עכשיו לאמולטור Pub/Sub.
הגדרה ידנית של המשתנים
אם האפליקציה והאמולטור פועלים במכונות שונות, צריך להגדיר את משתני הסביבה באופן ידני:
מריצים את הפקודה
env-init:gcloud beta emulators pubsub env-init
במחשב שבו האפליקציה פועלת, מגדירים את משתנה הסביבה
PUBSUB_EMULATOR_HOSTואת הערך שלו בהתאם להוראות בפלט של הפקודהenv-init. ההגדרה הזו מחברת את האפליקציה לאמולטור. אפשר גם להגדיר את משתנה הסביבהPUBSUB_PROJECT_IDלפרויקט שבו רוצים להשתמש באמולטור.Linux / macOS export PUBSUB_EMULATOR_HOST=[::1]:8432 export PUBSUB_PROJECT_ID=my-project-id
Windows set PUBSUB_EMULATOR_HOST=[::1]:8432 set PUBSUB_PROJECT_ID=my-project-id
האפליקציה שלכם תתחבר עכשיו לאמולטור Pub/Sub.
הערה: אם אתם משתמשים בשרת הפיתוח המקומי של Python App Engine Standard, אתם צריכים להעביר את משתנה הסביבה הזה בשורת הפקודה באופן הבא:
dev_appserver.py app.yaml --env_var PUBSUB_EMULATOR_HOST=${PUBSUB_EMULATOR_HOST}dev_appserver.py כלול ב[PATH_TO_CLOUD_SDK]/google-cloud-sdk/bin/dev_appserver.py.
שימוש באמולטור
כדי להשתמש באמולטור, צריך אפליקציה שנבנתה באמצעות ספריות הלקוח של Cloud.
האמולטור לא תומך בפקודות של Cloud de Confiance מסוף או gcloud pubsub.
בדוגמה הבאה מוצג שימוש באמולטור ובאפליקציה שמשתמשת בספריית הלקוח של Python Cloud כדי לבצע פעולות שונות. דוגמאות לפעולות האלה כוללות יצירת נושא, פרסום הודעות וקריאת הודעות.
במחשב שבו הגדרתם את משתני הסביבה של האמולטור, מבצעים את השלבים הבאים:
כדי לקבל את הדוגמאות של Python ל-Pub/Sub מ-GitHub, צריך לשכפל את מאגר Python המלא.
במאגר המשוכפל, עוברים לספרייה
samples/snippets. את שאר השלבים מבצעים בספרייה הזו.בספרייה
samples/snippets, מתקינים את הרכיבים התלויים שצריך כדי להריץ את הדוגמה:pip install -r requirements.txt
כדי ליצור נושא:
python publisher.py PUBSUB_PROJECT_ID create TOPIC_ID
(אופציונלי) אם אין לכם נקודת קצה מקומית של הודעות פוש לבדיקת מינויים להודעות פוש באמולטור, צריך לבצע את השלבים הבאים כדי ליצור אחת ב-
http://[::1]:3000/messages.- מתקינים את JSON Server.
npm install -g json-server
- מפעילים את JSON Server.
כאשרjson-server --port 3000 --watch db.json
db.jsonמכיל את קוד לתחילת הדרך הבא:{ "messages": [] } - חשוב לרשום את
http://[::1]:3000/messagesבשביל PUSH_ENDPOINT בשלב הבא.
- מתקינים את JSON Server.
יוצרים מינוי לנושא:
יצירת מינוי שליפה:
python subscriber.py PUBSUB_PROJECT_ID create TOPIC_ID SUBSCRIPTION_ID
יצירת מינוי דחיפה:
python subscriber.py PUBSUB_PROJECT_ID create-push TOPIC_ID SUBSCRIPTION_ID \ PUSH_ENDPOINT
פרסום הודעות בנושא:
python publisher.py PUBSUB_PROJECT_ID publish TOPIC_ID
קוראים את ההודעות שפורסמו בנושא:
אחזור הודעות ממינוי השליפה שלך:
python subscriber.py PUBSUB_PROJECT_ID receive SUBSCRIPTION_ID
בודקים את ההודעות שנמסרו לנקודת הקצה המקומית של הודעות הפוש. לדוגמה, הודעות שנראות כך:
{ "messages": [ { "subscription": "projects/PUBSUB_PROJECT_ID/subscriptions/SUBSCRIPTION_ID", "message": { "data": "TWVzc2FnZSBudW1iZXIgMQ==", "messageId": "10", "attributes": {} }, "id": 1 }, ... ] }
גישה למשתני סביבה
בכל השפות חוץ מ-Java ו-C#, אם הגדרתם את PUBSUB_EMULATOR_HOST כמו שמתואר במאמר הגדרת משתני סביבה, ספריות הלקוח של Pub/Sub קוראות אוטומטית ל-API שפועל במופע המקומי ולא ל-Pub/Sub.
עם זאת, בספריות הלקוח של C# ו-Java צריך לשנות את הקוד כדי להשתמש באמולטור:
C#
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי C#הוראות ההגדרה במאמר התחלה מהירה של Pub/Sub באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub C# API.
כדי לבצע אימות ב-Pub/Sub, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה במאמר התחלה מהירה של Pub/Sub באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Java API.
כדי לבצע אימות ב-Pub/Sub, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
הפסקת האמולטור
כדי לעצור את האמולטור, מקישים על Control+C.
אחרי שמפסיקים את האמולטור, מריצים את הפקודה הבאה כדי להסיר את משתנה הסביבה PUBSUB_EMULATOR_HOST, כך שהאפליקציה תתחבר ל-Pub/Sub:
unset PUBSUB_EMULATOR_HOST
set PUBSUB_EMULATOR_HOST=
ארגומנטים בשורת הפקודה של האמולטור
פרטים על ארגומנטים של שורת הפקודה לאמולטור Pub/Sub מופיעים במאמר gcloud beta emulators pubsub.
תכונות נתמכות
האמולטור תומך בתכונות הבאות של Pub/Sub:
- פרסום הודעות
- קבלת הודעות ממינויים מסוג push ו-pull
- סדר ההודעות
- הפעלה מחדש של הודעות
- העברת הודעות לנושאים להודעות ללא מוצא
- מדיניות ניסיון חוזר בנושא מסירת הודעות
- תמיכה בסכימה ב-Avro
- סינון
מגבלות ידועות
- אין תמיכה ב-RPC
UpdateTopicוב-RPCUpdateSnapshot. - אין תמיכה בפעולות IAM.
- אין תמיכה בהגדרה של משך השמירה של ההודעות, וכל ההודעות נשמרות ללא הגבלת זמן.
- אין תמיכה בתפוגה של מינוי. המינויים לא פוקעים.
- תמיכה בסכימה של מאגרי פרוטוקולים.
- אפשר ליצור מינויים ל-BigQuery, אבל לא לשלוח הודעות ל-BigQuery.
- אי אפשר לדלג לנקודת זמן במינויים מסודרים.
- אפשר ליצור נושאים ומינויים באמצעות Single Message Transforms (SMTs), אבל ההודעות לא יומרו.
כדי לדווח על בעיות, שולחים דיווח בכלי הציבורי למעקב אחר בעיות.
המאמרים הבאים
- בפוסט הזה בבלוג מוסבר איך להשתמש באמולטור Pub/Sub עם minikube.