תבנית MQTT ל-Pub/Sub היא צינור סטרימינג שקורא הודעות מנושא MQTT וכותב אותן ל-Pub/Sub.
הוא כולל את הפרמטרים האופציונליים username ו-password למקרה ששרת ה-MQTT דורש אימות.
אם צינור הנתונים לא מקבל הודעה מנושא ה-MQTT במשך יותר מ-90 דקות, מתרחשת StackOverflowError.
כפתרון עקיף, אפשר לשנות את מספר העובדים כל 90 דקות.
מידע נוסף על שינוי מספר העובדים בלי להפסיק את העבודה זמין במאמר עדכון אפשרויות של עבודה בתהליך.
הדרישות לגבי צינורות עיבוד נתונים
- השם של נושא הפלט ב-Pub/Sub חייב להיות קיים.
- כתובת ה-IP של מארח ה-MQTT צריכה להיות קיימת ולהיות מוגדרת ברשת בצורה נכונה כדי שמכונות העובד יוכלו להגיע למארח ה-MQTT.
- לנושא ה-MQTT שממנו מחלצים את הנתונים צריך להיות שם.
פרמטרים של תבניות
פרמטרים נדרשים
- inputTopic: השם של נושא ה-MQTT שממנו הנתונים נקראים. לדוגמה,
topic. - outputTopic: השם של נושא הפלט ב-Pub/Sub שהנתונים נכתבים אליו. לדוגמה,
projects/your-project-id/topics/your-topic-name. - username: שם המשתמש שמשמש לאימות בשרת MQTT. לדוגמה,
sampleusername. - password: הסיסמה שמשויכת לשם המשתמש שסופק. לדוגמה,
samplepassword.
פרמטרים אופציונליים
- brokerServer: כתובת ה-IP או המארח של שרת מתווך MQTT. לדוגמה,
tcp://host:1883.
הרצת התבנית
המסוף
- עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow. כניסה לדף Create job from template
- בשדה שם המשימה, מזינים שם ייחודי למשימה.
- אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא
us-central1.רשימת האזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר בנושא מיקומי Dataflow.
- בתפריט הנפתח Dataflow template (תבנית של Dataflow), בוחרים באפשרות MQTT to Pub/Sub template (תבנית MQTT ל-Pub/Sub).
- בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
- לוחצים על הפעלת העבודה.
gcloud
במעטפת או בטרמינל, מריצים את התבנית:
gcloud dataflow flex-template run JOB_NAME \ --project=YOUR_PROJECT_ID \ --region=REGION_NAME \ --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/ \ --parameters \ brokerServer=MQTT_SERVER,\ inputTopic=INPUT_TOPIC,\ outputTopic=OUTPUT_TOPIC,\ username=USERNAME,\ password=PASSWORD
בדוגמה הזו, צריך להחליף את הערכים הבאים:
- מחליפים את YOUR_PROJECT_ID במזהה הפרויקט.
- מחליפים את בשם האזור של Dataflow. לדוגמה:
us-central1. - מחליפים את JOB_NAME בשם של המשימה לבחירתכם. שם המשרה חייב להתאים לביטוי הרגולרי
[a-z]([-a-z0-9]{0,38}[a-z0-9])?כדי להיחשב כתקין. - מחליפים את INPUT_TOPIC בשם של נושא הקלט של שרת MQTT. לדוגמה:
testtopic. - מחליפים את MQTT_SERVER בכתובות של שרת ה-MQTT. לדוגמה:
tcp://10.128.0.62:1883 - מחליפים את OUTPUT_TOPIC בשם של נושא הפלט ב-Pub/Sub. לדוגמה:
projects/myproject/topics/testoutput. - מחליפים את USERNAME בשם המשתמש של שרת ה-MQTT. לדוגמה:
testuser. - מחליפים את PASSWORD בסיסמה שמתאימה לשם המשתמש שמשמש עם שרת ה-MQTT.
API
כדי להריץ את התבנית באמצעות API בארכיטקטורת REST, שולחים בקשת HTTP POST. מידע נוסף על ה-API ועל היקפי ההרשאות שלו זמין במאמר projects.templates.launch.
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launch_parameter": { "jobName": "JOB_NAME", "parameters": { "brokerServer": "MQTT_SERVER", "inputTopic": "INPUT_TOPIC", "outputTopic": "OUTPUT_TOPIC", "username": "USERNAME", "password": "PASSWORD" }, "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/", } }
בדוגמה הזו צריך להחליף את הערכים הבאים:
- מחליפים את YOUR_PROJECT_ID במזהה הפרויקט.
- מחליפים את בשם האזור של Dataflow. לדוגמה:
us-central1. - מחליפים את JOB_NAME בשם של המשימה לבחירתכם. שם המשרה חייב להתאים לביטוי הרגולרי
[a-z]([-a-z0-9]{0,38}[a-z0-9])?כדי להיחשב כתקין. - מחליפים את INPUT_TOPIC בשם של נושא הקלט של שרת MQTT. לדוגמה:
testtopic. - מחליפים את MQTT_SERVER בכתובות של שרת ה-MQTT. לדוגמה:
tcp://10.128.0.62:1883 - מחליפים את OUTPUT_TOPIC בשם של נושא הפלט ב-Pub/Sub. לדוגמה:
projects/myproject/topics/testoutput. - מחליפים את USERNAME בשם המשתמש של שרת ה-MQTT. לדוגמה:
testuser. - מחליפים את PASSWORD בסיסמה שמתאימה לשם המשתמש שמשמש עם שרת ה-MQTT.
המאמרים הבאים
- מידע נוסף על תבניות Dataflow
- כאן אפשר לעיין ברשימת התבניות ש-Google סיפקה.