בדף הזה מובאת סקירה כללית על תורי משיכה בסביבה הרגילה של App Engine.
בתורי push, המשימות מועברות לשירות של עובד על סמך ההגדרה של התור. בתורי pull, שירות העובד צריך לבקש משימות מהתור. התור מגיב בכך שהוא מאפשר לעובד גישה ייחודית לעיבוד המשימה למשך תקופה מוגדרת, שנקראת חכירה.
באמצעות תורי משימות מסוג pull, אפשר גם לקבץ משימות קשורות באמצעות תגים, ואז להגדיר את העובד כך שימשוך כמה משימות עם תג מסוים בבת אחת. התהליך הזה נקרא איגום.
אם עובד לא יכול לעבד משימה לפני שתוקף השכירות שלה פג, הוא יכול לחדש את השכירות או לאפשר לה לפוג. בשלב הזה, עובד אחר יכול לקבל אותה. אחרי שהעובד מסיים את העבודה שמשויכת למשימה, הוא צריך למחוק אותה.
כדי להשתמש בתורים מסוג pull, הקוד צריך לטפל בפונקציות מסוימות שאוטומטיות בתורים מסוג push:
- הגדלת מספר העובדים
- הקוד צריך לשנות את מספר העובדים בהתאם לנפח העיבוד. אם הקוד לא מטפל בהתאמת גודל, אתם עלולים לבזבז משאבי מחשוב אם אין משימות לעיבוד, או להיתקל בהשהיה אם יש יותר מדי משימות לעיבוד.
- מחיקת המשימות
- הקוד צריך גם למחוק משימות באופן מפורש אחרי העיבוד. בתורי דחיפה, App Engine מוחק את המשימות בשבילכם. אם ה-worker לא מוחק משימות מתור משיכה (pull queue) אחרי העיבוד, worker אחר יעבד מחדש את המשימה. הפעולה הזו מבזבזת משאבי מחשוב ועלולה לגרום לשגיאות אם המשימות לא אידמפוטנטיות.
תורים של שליפת הודעות בסביבה הרגילה של App Engine נוצרים על ידי הגדרת מאפיין בקובץ הגדרה בשם
queue.yaml
.
תהליך עבודה של תור משיכה (pull queue)
צריך להגדיר עובדים שמבצעים משימות מתורי משימות מסוג pull בשירות שפועל בסביבה הרגילה של App Engine.
זהו תהליך העבודה:
- יוצרים תור שליפה באמצעות
queue.yaml. - יוצרים משימות ומוסיפים אותן לתור.
- ה-worker שיצרתם שוכר את המשימה באמצעות [TaskQueue](/appengine/docs/standard/go/reference/services/bundled/latest/taskqueue).
- App Engine שולח את נתוני המשימה לעובד בתשובה על השכירות.
- תהליך העובד מעבד את המשימה. אם ביצוע המשימה נכשל לפני שתוקף ההרשאה פג, העובד יכול לשנות את משך ההרשאה. אם תוקף ההרשאה פג, המשימה תהיה זמינה להקצאה לעובד אחר.
- אחרי שמשימה מעובדת בהצלחה, העובד מוחק אותה.