בדף הזה מוסבר איך ליצור מינויים ל-Pub/Sub עם מסננים.
כשמקבלים הודעות מרשימת תפוצה עם מסנן, מקבלים רק את ההודעות שתואמות למסנן. שירות Pub/Sub מאשר באופן אוטומטי את ההודעות שלא תואמות למסנן. אפשר לסנן הודעות לפי המאפיינים שלהן, אבל לא לפי הנתונים בהודעה.
אפשר להוסיף כמה מינויים לנושא, ולכל מינוי יכול להיות פילטר שונה.
לדוגמה, אם יש לכם נושא שמקבל חדשות מחלקים שונים בעולם, אתם יכולים להגדיר מינוי לסינון חדשות שפורסמו רק מאזור מסוים. בהגדרה הזו, צריך לוודא שאחד ממאפייני ההודעה בנושא מציין את האזור שבו מתפרסמת הידיעה.
כשמקבלים הודעות ממינוי עם מסנן, לא חלים תשלומים על הודעות יוצאות על ההודעות שהמערכת של Pub/Sub מאשרת באופן אוטומטי. תחויבו בדמי מסירת הודעות ובדמי אחסון שקשורים לחיפוש עבור ההודעות האלה.
יצירת מינוי עם מסנן
אפשר להוסיף מסננים למינויים מסוג 'שליפה' ו'דחיפה'. כל המנויים יכולים לקבל הודעות ממינויים עם מסננים, כולל מנויים שמשתמשים ב-StreamingPull API.
אפשר ליצור מינוי עם מסנן באמצעות מסוף Google Cloud , Google Cloud CLI, ספריות הלקוח או Pub/Sub API.
המסוף
כדי ליצור מינוי שליפה עם מסנן:
נכנסים לדף Subscriptions במסוף Google Cloud .
לוחצים על יצירת מינוי.
מזינים את מזהה המינוי.
בוחרים נושא מהתפריט הנפתח או יוצרים נושא חדש. המינוי מקבל הודעות מהנושא.
בקטע Subscription filter, מזינים את ביטוי הסינון.
לוחצים על יצירה.
כדי ליצור מינוי דחיפה עם מסנן:
נכנסים לדף Subscriptions במסוף Google Cloud .
לוחצים על יצירת מינוי.
מזינים את מזהה המינוי.
בוחרים נושא מהתפריט הנפתח או יוצרים נושא חדש. המינוי מקבל הודעות מהנושא.
בקטע סוג המסירה, לוחצים על דחיפה.
בשדה כתובת URL של נקודת קצה, מזינים את כתובת ה-URL של נקודת הקצה של ה-push.
בקטע Subscription filter, מזינים את ביטוי הסינון.
לוחצים על יצירה.
gcloud
כדי ליצור מינוי מסוג pull עם מסנן, משתמשים בפקודה gcloud pubsub subscriptions create עם הדגל --message-filter:
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --message-filter='FILTER'
מחליפים את מה שכתוב בשדות הבאים:
- SUBSCRIPTION_ID: המזהה של המינוי שרוצים ליצור
- TOPIC_ID: המזהה של הנושא לצירוף למינוי
- FILTER: ביטוי בתחביר הסינון
כדי ליצור מינוי מסוג push עם מסנן, משתמשים בפקודה gcloud pubsub subscriptions create עם הדגלים --push-endpoint ו---message-filter:
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --push-endpoint=PUSH_ENDPOINT \ --message-filter='FILTER'
מחליפים את מה שכתוב בשדות הבאים:
- SUBSCRIPTION_ID: המזהה של המינוי שרוצים ליצור
- TOPIC_ID: המזהה של הנושא לצירוף למינוי
- PUSH_ENDPOINT: כתובת ה-URL של השרת שבו פועל המנוי לקבלת עדכונים
- FILTER: ביטוי בתחביר הסינון
REST
כדי ליצור מינוי עם מסנן, משתמשים ב-method projects.subscriptions.create.
PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID Authorization: Bearer $(gcloud auth print-access-token)
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את המינוי
- SUBSCRIPTION_ID: המזהה של המינוי שרוצים ליצור
כדי ליצור מינוי שליפה עם מסנן, מציינים את המסנן בגוף הבקשה:
{ "topic": "projects/PROJECT_ID/topics/TOPIC_ID", "filter": "FILTER" }
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט של הפרויקט עם הנושא
- TOPIC_ID: המזהה של הנושא לצירוף למינוי
- FILTER: ביטוי בתחביר הסינון
כדי ליצור מינוי דחיפה עם מסנן, מציינים את נקודת הקצה של הדחיפה ואת המסנן בגוף הבקשה:
{ "topic": "projects/PROJECT_ID/topics/TOPIC_ID", "pushConfig": { "pushEndpoint": "PUSH_ENDPOINT" }, "filter": "FILTER" }
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט של הפרויקט עם הנושא
- TOPIC_ID: המזהה של הנושא לצירוף למינוי
- PUSH_ENDPOINT: כתובת ה-URL של השרת שבו פועל המנוי לקבלת עדכונים
- FILTER: ביטוי בתחביר הסינון
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.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במאמר הפעלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Node.js API.
PHP
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של PHP במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub PHP API.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של ה-API בשפת Python של Pub/Sub.
Ruby
בדוגמה הבאה נעשה שימוש בספריית הלקוח של Ruby Pub/Sub בגרסה 3. אם אתם עדיין משתמשים בספרייה v2, כדאי לעיין במדריך להעברה לגרסה v3. כדי לראות רשימה של דוגמאות קוד של Ruby v2, אפשר לעיין ב דוגמאות הקוד שהוצאו משימוש.
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Ruby במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Ruby API.
האורך המקסימלי של מסנן הוא 256 בייטים. המסנן הוא מאפיין קבוע של מינוי. אחרי שיוצרים מינוי, אי אפשר לעדכן אותו כדי לשנות את המסנן.
איך מסננים משפיעים על מדדי ה-backlog
כדי לעקוב אחרי המינוי שיצרתם, אפשר לקרוא את המאמר מעקב אחרי מינויים באמצעות מסננים.
אם הפעלתם סינון, מדדי העומס בעבודה יכללו רק נתונים מהודעות שתואמות למסנן. ריכזנו כאן רשימה של מדדי ה-backlog:
subscription/backlog_bytessubscription/unacked_bytes_by_regionsubscription/num_undelivered_messagessubscription/num_unacked_messages_by_regionsubscription/oldest_unacked_message_agesubscription/oldest_unacked_message_age_by_regiontopic/unacked_bytes_by_regiontopic/num_unacked_messages_by_regiontopic/oldest_unacked_messages_age_by_region
מידע נוסף על המדדים האלה זמין ברשימת המדדים של Pub/Sub.
עדכון המסנן למינוי
אי אפשר לעדכן את המסנן של מינוי קיים. במקום זאת, אפשר לנסות את הפתרון העקיף הזה.
מצלמים צילום מסך של המינוי שרוצים לשנות את המסנן שלו.
מידע נוסף על יצירת snapshot באמצעות המסוף זמין במאמר יצירת snapshot.
יוצרים מינוי חדש עם המסנן החדש.
מידע נוסף על יצירת מינוי עם מסנן זמין במאמר יצירת מינוי עם מסנן.
נכנסים לדף Pub/Sub subscriptions במסוף Google Cloud .
לוחצים על המינוי שיצרתם.
בדף פרטי המינוי, לוחצים על הפעלת הודעות מחדש.
כדי לדלג, לוחצים על לתמונת מצב.
בוחרים את התמונה שנוצרה למינוי המקורי בשלב 1 ולוחצים על חיפוש.
לא תאבדו אף הודעה במהלך המעבר.
מעבירים את המנויים למינוי החדש.
אחרי שמסיימים את התהליך הזה, אפשר למחוק את המינוי המקורי.
תחביר ליצירת מסנן
כדי לסנן הודעות, צריך לכתוב ביטוי שפועל על מאפיינים. אפשר לכתוב ביטוי שתואם למפתח או לערך של המאפיינים. המזהה attributes בוחר את המאפיינים בהודעה.
לדוגמה, המסננים בטבלה הבאה בוחרים את מאפיין name:
| מסנן | תיאור |
|---|---|
attributes:name |
הודעות עם המאפיין name |
NOT attributes:name |
הודעות ללא המאפיין name |
attributes.name = "com" |
הודעות עם המאפיין name והערך com |
attributes.name != "com" |
הודעות בלי המאפיין name והערך com |
hasPrefix(attributes.name, "co") |
הודעות עם המאפיין name וערך שמתחיל ב-co |
NOT hasPrefix(attributes.name, "co") |
הודעות בלי המאפיין name ועם ערך שמתחיל ב-co |
אופרטורים להשוואה של ביטוי המסנן
אפשר לסנן מאפיינים באמצעות אופרטורי ההשוואה הבאים:
:=!=
האופרטור : מתאים למפתח ברשימה של מאפיינים.
attributes:KEY
אופרטורי השוויון מתאימים למפתחות ולערכים. הערך חייב להיות מחרוזת מילולית.
attributes.KEY = "VALUE"
ביטוי עם אופרטור שוויון חייב להתחיל במפתח, ואופרטור השוויון חייב להשוות בין מפתח לערך.
תקין: המסנן משווה בין מפתח לערך
attributes.name = "com"לא תקין: הצד הימני של המסנן הוא ערך
"com" = attributes.nameלא תקין: המסנן משווה בין שני מפתחות
attributes.name = attributes.website
המפתח והערך הם תלויי אותיות רישיות, וחייבים להיות זהים בדיוק למאפיין. אם מפתח מכיל תווים שאינם מקפים, קווים תחתונים או תווים אלפאנומריים, צריך להשתמש במחרוזת מילולית.
attributes."iana.org/language_tag" = "en"
כדי להשתמש בקו נטוי הפוך, במירכאות ובתווים שאינם מודפסים במסנן, צריך להשתמש בתו בריחה לתווים בתוך מחרוזת מילולית. אפשר גם להשתמש ברצפי בריחה מסוג Unicode, הקסדצימלי ואוקטלי בתוך מחרוזת מילולית.
תקין: סינון תווים מיוחדים בתוך מחרוזת מילולית
attributes:"\u307F\u3093\u306A"לא תקין: המסנן מבצע escape לתווים בלי מחרוזת מילולית
attributes:\u307F\u3093\u306A
אופרטורים בוליאניים לביטוי הסינון
אפשר להשתמש באופרטורים בוליאניים AND, NOT ו-OR במסנן. האופרטורים צריכים להיות באותיות רישיות. לדוגמה, המסנן הבא הוא להודעות עם המאפיין iana.org/language_tag, אבל בלי המאפיין name והערך com.
attributes:"iana.org/language_tag" AND NOT attributes.name = "com"
לאופרטור NOT יש את העדיפות הגבוהה ביותר. כדי לשלב בין האופרטורים AND ו-OR, משתמשים בסוגריים ובביטויים מלאים.
תקין: אופרטורים
ANDו-ORעם סוגרייםattributes:"iana.org/language_tag" AND (attributes.name = "net" OR attributes.name = "org")לא תקין: אופרטורים
ANDו-ORללא סוגרייםattributes:"iana.org/language_tag" AND attributes.name = "net" OR attributes.name = "org"לא תקין: האופרטורים
ANDו-ORמשלבים ביטויים לא שלמיםattributes.name = "com" AND ("net" OR "org")
אפשר גם להשתמש באופרטור מינוס אונרי במקום באופרטור NOT.
attributes.name = "com" AND -attributes:"iana.org/language_tag"
פונקציות לביטוי הסינון
אפשר להשתמש בפונקציה hasPrefix כדי לסנן מאפיינים עם ערכים שמתחילים במחרוזת משנה. hasPrefix היא הפונקציה היחידה שנתמכת במסנן.
יש תמיכה בהתאמה של קידומות באמצעות הפונקציה hasPrefix, אבל אין תמיכה בביטויים רגולריים כלליים.
hasPrefix(attributes.KEY, "SUBSTRING")
מחליפים את מה שכתוב בשדות הבאים:
- KEY: שם המאפיין
- SUBSTRING: מחרוזת משנה של הערך