Google CloudPub/Sub یک گذرگاه پیام توزیعشده جهانی است که بهطور خودکار با نیازهای شما مقیاسبندی میشود. هرگاه پیام Pub/Sub جدیدی به موضوع خاصی ارسال شود، میتوانید تابعی را راهاندازی کنید.
واحدهای لازم را وارد کنید
برای شروع، واحدهای لازم برای مدیریت رویدادهای Pub/Sub را وارد کنید:
Node.js
const {onMessagePublished} = require("firebase-functions/pubsub");
const logger = require("firebase-functions/logger");
پایتون
from firebase_functions import pubsub_fn
راهاندازی تابع
باید Pub/Sub نام موضوعی را که میخواهید تابع شما را راهاندازی کند مشخص کنید، و رویداد را در مدیر رویداد تنظیم کنید:
Node.js
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
پایهبار پیام Pub/Sub از شیء پیام برگشتدادهشده به عملکرد شما قابلدسترس است. برای پیامهایی که در Pub/Sub پیام بدنه JSON دارند، «کیت توسعه نرمافزار» Firebase برای Cloud Functions دارایی کمکی برای رمزگشایی پیام دارد. برای مثال، در اینجا پیامی منتشرشده با یک پایهبار JSON ساده آورده شده است:
gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}'
ازطریق دارایی json میتوانید به چنین دادهبار JSON دسترسی پیدا کنید:
Node.js
// 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'
Node.js
// 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
میتوانید چنین مشخصههایی را از دارایی مربوط به شیء پیام بخوانید:
Node.js
// 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"]