Pub/Sub tetikleyicileri


Google Cloud'ın Pub/Sub, ihtiyaç duyduğunuzda otomatik olarak ölçeklenen, küresel olarak dağıtılmış bir mesaj yoludur. Belirli bir konuya yeni bir Pub/Sub mesaj gönderildiğinde bir işlevi tetikleyebilirsiniz.

Başlamak için Pub/Sub etkinliklerini işlemek için gereken modülleri içe aktarın:

Node.jsPython
const {onMessagePublished} = require("firebase-functions/v2/pubsub");
const logger = require("firebase-functions/logger");
from firebase_functions import pubsub_fn

İşlevi tetikleme

İşlevinizi tetiklemek istediğiniz Pub/Sub konu adını belirtmeniz ve etkinliği etkinlik işleyici içinde ayarlamanız gerekir:

Node.jsPython
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 mesaj yüküne erişme

Pub/Sub mesajının yükü, işlevinize döndürülen mesaj nesnesinden erişilebilir. Pub/Sub mesaj gövdesinde JSON bulunan mesajlar için Cloud Functions'ye yönelik Firebase SDK'sında, mesajın kodunu çözmek üzere bir yardımcı mülk bulunur. Örneğin, basit bir JSON yükü ile yayınlanan bir mesajı aşağıda bulabilirsiniz:

gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}'

json mülkü aracılığıyla aşağıdaki gibi bir JSON veri yüküne erişebilirsiniz:

Node.jsPython
  // 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 olmayan diğer yükler, mesaj nesnesinde base64 kodlu dize olarak Pub/Sub mesajında bulunur. Aşağıdaki gibi bir mesajı okumak için base64 kodlu dizenin kodunu aşağıdaki gibi çözmeniz gerekir:

gcloud pubsub topics publish topic-name --message 'MyMessage'
Node.jsPython
// 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)

Mesaj özelliklerine erişme

Pub/Sub mesajı, yayınlama komutunda ayarlanan veri özellikleriyle gönderilebilir. Örneğin, name özelliğine sahip bir mesaj yayınlayabilirsiniz:

gcloud pubsub topics publish topic-name --attribute name=Xenia

Bu tür özellikleri, ileti nesnesinin ilgili özelliğinden okuyabilirsiniz:

Node.jsPython
// 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"]