Google Cloud 's Pub/Sub یک گذرگاه پیام توزیع شده در سطح جهانی است که به طور خودکار در صورت نیاز شما مقیاس می شود. هر زمان که یک پیام Pub/Sub جدید به یک موضوع خاص ارسال می شود، می توانید یک تابع را فعال کنید.
برای شروع، ماژول های مورد نیاز برای مدیریت رویدادهای Pub/Sub را وارد کنید:
const {onMessagePublished} = require("firebase-functions/pubsub");
const logger = require("firebase-functions/logger");
from firebase_functions import pubsub_fn
شما باید نام موضوع Pub/Sub را که میخواهید عملکرد شما را فعال کند مشخص کنید و رویداد را در کنترل کننده رویداد تنظیم کنید:
exports.hellopubsub = onMessagePublished("topic-name", (event) => {
@pubsub_fn.on_message_published(topic="topic-name")
def hellopubsub(event: pubsub_fn.CloudEvent[pubsub_fn.MessagePublishedData]) -> None:
"""Log a message using data published to a Pub/Sub topic."""
محموله پیام Pub/Sub از شیء پیامی که به عملکرد شما بازگردانده شده است قابل دسترسی است. برای پیامهای دارای JSON در متن پیام Pub/Sub ، Firebase SDK for Cloud Functions دارای ویژگی کمکی برای رمزگشایی پیام است. به عنوان مثال، در اینجا پیامی با یک بار ساده JSON منتشر شده است:
gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}'
شما می توانید از طریق ویژگی json
به یک محموله داده JSON مانند این دسترسی داشته باشید:
// Get the `name` attribute of the PubSub message JSON body. let name = null; try { name = event.data.message.json.name; } catch (e) { logger.error("PubSub message was not JSON", e); }
# Get the `name` attribute of the PubSub message JSON body.
try:
data = event.data.message.json
except ValueError:
print("PubSub message was not JSON")
return
if data is None:
return
if "name" not in data:
print("No 'name' key")
return
name = data["name"]
سایر محمولههای غیر JSON در پیام Pub/Sub بهعنوان رشتههای کدگذاری شده base64 در شیء پیام وجود دارند. برای خواندن پیامی مانند زیر، باید رشته رمزگذاری شده base64 را مطابق شکل رمزگشایی کنید:
gcloud pubsub topics publish topic-name --message 'MyMessage'
// Decode the PubSub Message body. const message = event.data.message; const messageBody = message.data ? Buffer.from(message.data, "base64").toString() : null;
# Decode the PubSub message body.
message_body = base64.b64decode(event.data.message.data)
پیام Pub/Sub را می توان با ویژگی های داده تنظیم شده در دستور انتشار ارسال کرد. به عنوان مثال، می توانید پیامی را با ویژگی name
منتشر کنید:
gcloud pubsub topics publish topic-name --attribute name=Xenia
شما می توانید چنین ویژگی هایی را از ویژگی متناظر شی پیام بخوانید:
// Get the `name` attribute of the message. const name = event.data.message.attributes.name;
# Get the `name` attribute of the message.
if "name" not in event.data.message.attributes:
print("No 'name' attribute")
return
name = event.data.message.attributes["name"]