محرک های Pub/Sub

Pub/Sub Google Cloud یک گذرگاه پیام توزیع‌شده جهانی است که به‌طور خودکار بسته به نیاز شما مقیاس‌پذیر می‌شود. می‌توانید هر زمان که یک پیام 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

بار مفید (payload) پیام Pub/Sub از شیء پیام برگردانده شده به تابع شما قابل دسترسی است. برای پیام‌هایی که در بدنه پیام Pub/Sub از نوع JSON هستند، Firebase SDK برای 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 را می‌توان با ویژگی‌های داده‌ای که در دستور publish تنظیم شده‌اند، ارسال کرد. برای مثال، می‌توانید پیامی را با ویژگی 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"]