העברת תורים של שליפת הודעות ל-Pub/Sub‏ (Python)

בדף הזה מוסבר איך להעביר קוד של תור משימות מסוג שליפת הודעות מ-Task Queues ל-Pub/Sub. ‫Pub/Sub היא עכשיו הדרך המומלצת לבצע עבודה בתור משימות מסוג pull ב-App Engine.

אם האפליקציה שלכם משתמשת בתורי משיכה ובתורי דחיפה, כדאי להשתמש במדריך הזה כדי להעביר את תורי המשיכה ל-Pub/Sub לפני שמעבירים את תורי הדחיפה לשירות החדש של תורי דחיפה Cloud Tasks. לא מומלץ להעביר את תורי המשימות מסוג pull אחרי העברת תורי המשימות מסוג push ל-Cloud Tasks, כי השימוש הנדרש בקובץ queue.yaml עלול לגרום להתנהגות בלתי צפויה ב-Cloud Tasks.

תכונות שלא זמינות כרגע ב-Pub/Sub

התכונות הבאות של תורי משימות לא זמינות כרגע ב-Pub/Sub:

  • הוספה לחבילה לפי תג
  • ביטול כפילויות אוטומטי

תמחור ומכסות

העברת תורי שליפה ל-Pub/Sub עשויה להשפיע על התמחור והמכסות של האפליקציה.

תמחור

ל-Pub/Sub יש תמחור משלו. בדומה לתורי משימות, שליחת בקשות לאפליקציית App Engine באמצעות Pub/Sub עלולה לגרום לאפליקציה שלכם לחייב אתכם בעלויות.

מכסות

המכסות של Pub/Sub שונות מהמכסות של Task Queues. בדומה לתורי משימות, שליחת בקשות לאפליקציית App Engine מ-Pub/Sub עשויה להשפיע על מכסות הבקשות של App Engine.

לפני ההעברה

אם עדיין לא עשיתם זאת, צריך להגדיר את סביבת הפיתוח של Python כך שתשתמש בגרסת Python שתואמת ל- Google Cloud, ולהתקין כלי בדיקה ליצירת סביבות Python מבודדות.

בקטעים הבאים מפורטים שלבי ההגדרה לפני העברת תורי ההודעות מסוג pull ל-Pub/Sub.

הפעלת Pub/Sub API

כדי להפעיל את Pub/Sub API, לוחצים על Enable ב- Pub/Sub API ב-API Library. אם מופיע לחצן Manage (ניהול) במקום לחצן Enable (הפעלה), סימן שהפעלתם בעבר את Pub/Sub API בפרויקט, ואין צורך לעשות זאת שוב.

אימות האפליקציה ב-Pub/Sub API

צריך לאמת את האפליקציה שלכם ב-Pub/Sub API. בקטע הזה נדון באימות בשני תרחישי שימוש שונים.

כדי לפתח או לבדוק את האפליקציה באופן מקומי, מומלץ להשתמש בחשבון שירות. הוראות להגדרת חשבון שירות וקישור שלו לאפליקציה מופיעות במאמר קבלת פרטי כניסה לחשבון שירות וצירופם באופן ידני.

כדי לפרוס את האפליקציה ב-App Engine, לא צריך לספק אימות חדש. פרטי האימות של אפליקציות App Engine מוסקים מ-Application Default Credentials‏ (ADC).

הורדת Google Cloud CLI

אם לא התקנתם בעבר את Google Cloud CLI, הורידו והתקינו אותו כדי להשתמש ב-ה-CLI של gcloud עם Pub/Sub API. אם כבר התקנתם את Google Cloud CLI, מריצים את הפקודה הבאה מהטרמינל.

gcloud components update

ייבוא ספריות לקוח של Cloud

כדי להשתמש בספריית הלקוח של Python ב-Pub/Sub באפליקציית App Engine קיימת, פועלים לפי השלבים הבאים:

  1. מעדכנים את הקובץ app.yaml. פועלים לפי ההוראות שמתאימות לגרסת Python:

    Python 2

    באפליקציות Python 2, מוסיפים את הגרסאות האחרונות של ספריית grpcio.

    קובץ app.yaml לדוגמה:

    runtime: python27
    threadsafe: yes
    api_version: 1
    
    libraries:
    - name: grpcio
      version: latest
    

    ‫Python 3

    באפליקציות Python 3, מציינים את הרכיב runtime בקובץ app.yaml עם גרסת Python 3 נתמכת. לדוגמה:

    runtime: python310 # or another support version
    

    סביבת זמן הריצה של Python 3 מתקינה ספריות באופן אוטומטי, כך שלא צריך לציין ספריות מובנות מסביבת זמן הריצה הקודמת של Python 2. אם האפליקציה שלך ב-Python 3 משתמשת בשירותים אחרים מדור קודם שצורפו יחד כשמבצעים העברה, אפשר להמשיך לציין את הספריות המובנות הנדרשות. אחרת, אפשר למחוק את השורות המיותרות בקובץ app.yaml.

  2. מעדכנים את הקובץ requirements.txt. פועלים לפי ההוראות שמתאימות לגרסת Python:

    Python 2

    מוסיפים את ספריות הלקוח של Cloud Pub/Sub לרשימת התלויות בקובץ requirements.txt.

    google-cloud-pubsub
    

    לאחר מכן מריצים את הפקודה pip install -t lib -r requirements.txt כדי לעדכן את רשימת הספריות שזמינות לאפליקציה.

    ‫Python 3

    מוסיפים את ספריות הלקוח של Cloud Pub/Sub לרשימת התלויות בקובץ requirements.txt.

    google-cloud-pubsub
    

    מערכת App Engine מתקינה את התלות האלה באופן אוטומטי במהלך פריסת האפליקציה בסביבת זמן הריצה של Python 3, לכן צריך למחוק את התיקייה lib אם היא קיימת.

  3. באפליקציות Python 2, אם האפליקציה משתמשת בספריות מובנות או בספריות שהועתקו, צריך לציין את הנתיבים האלה בקובץ appengine_config.py שנמצא באותה תיקייה כמו קובץ app.yaml:

    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set PATH to your libraries folder.
    PATH = 'lib'
    # Add libraries installed in the PATH folder.
    vendor.add(PATH)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(PATH)
    

    בדוגמה שלמעלה, הקובץ appengine_config.py מניח שספריית העבודה הנוכחית היא המקום שבו נמצאת התיקייה lib. במקרים מסוימים, כמו בדיקות יחידה, ספריית העבודה הנוכחית יכולה להיות שונה. כדי להימנע משגיאות, אפשר להעביר באופן מפורש את הנתיב המלא לתיקייה lib באמצעות:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  4. מייבאים את ספריית הלקוח של Pub/Sub Python לכל הקבצים שמשתמשים בתורי שליפה מ-Task Queues API:

    from google.cloud import pubsub

תורים של Pub/Sub ושל שליפה

השוואה בין תכונות

‫Pub/Sub שולח עבודה לעובדים דרך קשר של מפרסם/מנוי. מינוי לשליפת הודעות ב-Pub/Sub דומה לתור של שליפת הודעות בתורי משימות, כי המנוי שולף את ההודעה מהנושא. בטבלה שבהמשך מפורטת התכונה העיקרית של תורי שליפת הודעות בתור המשימות, והתכונה המקבילה של מינויים לשליפת הודעות ב-Pub/Sub.

התכונה 'תורי משימות' תכונת Pub/Sub
הבאים בתור נושא
משימה הודעה
קובץ שירות מנויים

מידע נוסף על ארכיטקטורת Pub/Sub זמין במאמר Cloud Pub/Sub: שירות העברת הודעות עם מלוא היכולות של Google.

השוואה בין תהליכי עבודה

בהמשך מוצגת השוואה בין תהליך עבודה אופייני לתור משימות מסוג pull ב-Task Queues לבין מינוי מסוג pull ב-Pub/Sub.

תהליך העבודה עם תורי משימות זרימת עבודה של Pub/Sub
אתם יוצרים את תור ההמתנה למשיכות אתם יוצרים את הנושא ומצרפים את המנוי (כלומר, העובד) לנושא.
יוצרים את המשימה ומוסיפים אותה לתור יוצרים את ההודעה ומפרסמים אותה בנושא
העובד שוכר את המשימה המשתמש שנרשם לנושא מושך את ההודעה מהנושא
העובד מעבד את המשימה המנוי מעבד את ההודעה
העובד מוחק את המשימה מהתור המנוי מאשר את ההודעה
החוזה יפוג הנושא מוחק את ההודעה כשכל המנויים שלו אישרו את קבלת ההודעה

יצירת מינויים לשליפה ב-Pub/Sub

אתם יכולים להשתמש במינוי מסוג pull ב-Pub/Sub כמו בתור מסוג pull של תורי משימות. המינויים לנושא לא פוקעים, ויכולים להתקיים בו-זמנית לכמה עובדים. כלומר, יכול להיות שיותר מעובד אחד יעבד הודעה, וזה אחד מתרחישי השימוש העיקריים ב-Pub/Sub. כדי ליצור מחדש את תורי המשימות שלכם כמנויים לשליפה ב-Pub/Sub, יוצרים נושא לכל עובד ומנויים רק את העובד המשויך לנושא. כך מוודאים שכל הודעה תעובד על ידי עובד אחד בדיוק, כמו בתורי משימות. מידע על יצירה וניהול של מינויים מסוג pull זמין במאמר בנושא ניהול נושאים ומינויים.

מחיקת תורים להעברת הודעות

אחרי שמעבירים את תורי המשימות שלכם לתורי משימות של Pub/Sub, צריך למחוק אותם מתורי המשימות באמצעות קובץ ה-queue.yaml. מומלץ למחוק כל תור משיכה לפני העברת התור הבא. כך האפליקציה לא תשכפל את העבודה שהיא מקבלת מהמינוי החדש של Pub/Sub pull בזמן שאתם מעבירים את תורי ההמתנה האחרים של pull. שימו לב: מחיקה של תורי משימות מסוג pull בנפרד ולא בפריסה אחת עשויה להשפיע יותר על מכסת הפריסה של App Engine.

אחרי שמוחקים את כל תורי שליפת המשימות מ-Task Queues, אפשר להשמיט את קובץ queue.yaml מהפריסות העתידיות של האפליקציה.

אם האפליקציה שלכם משתמשת רק בתורי שליפה, צריך להסיר מהקוד את כל ההפניות ל-Task Queues API. אם האפליקציה שלכם משתמשת גם בתורי שליפה וגם בתורי דחיפה, אתם יכולים להסיר את ההפניות אל Task Queues API שמופיעות בקבצים שמשתמשים רק בתורי שליפה, או לחכות עד שתבצעו גם את ההעברה של תורי הדחיפה ואז להסיר את ההפניות אל Task Queues API מכל הקבצים.

המאמרים הבאים