Pub/Sub tetikleyicileri


Google Cloud'ın Pub/Sub, ihtiyaç duyduğunuzda otomatik olarak ölçeklendirilen, küresel olarak dağıtılmış bir mesaj yoludur. functions.pubsub kullanarak Pub/Sub etkinliklerini işleyen bir işlev oluşturabilirsiniz.

Pub/Sub işlevini tetikleme

Belirli bir konuya yeni bir Pub/Sub mesaj gönderildiğinde bir işlevi tetikleyebilirsiniz. İşlevinizi tetiklemek istediğiniz Pub/Sub konu adını belirtmeniz ve etkinliği onPublish() etkinlik işleyicisinde ayarlamanız gerekir:

exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => {
  // ...
});

Pub/Sub mesaj yüküne erişme {:#access-pub/sub}

Pub/Sub mesajının yükü, işlevinize döndürülen Message 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:

  // Get the `name` attribute of the PubSub message JSON body.
  let name = null;
  try {
    name = message.json.name;
  } catch (e) {
    functions.logger.error('PubSub message was not JSON', e);
  }

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'

// Decode the PubSub Message body.
const messageBody = message.data ? Buffer.from(message.data, 'base64').toString() : null;

Mesaj özelliklerine erişme {:#access-message}

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 Message.attributes'ten okuyabilirsiniz:

// Get the `name` attribute of the message.
const name = message.attributes.name;

Mesaj kimliği veya mesajın yayınlanma zamanı gibi bazı temel verilerin Message.attributes'te kullanılamadığını fark edebilirsiniz. Bu sorunu gidermek için tetikleyici etkinliğin EventContext bölümünde bu ayrıntılara erişebilirsiniz. Örneğin:

exports.myFunction = functions.pubsub.topic('topic1').onPublish((message, context) => {
    console.log('The function was triggered at ', context.timestamp);
    console.log('The unique ID for the event is', context.eventId);
});