Pub/Sub tetikleyicileri

Google Cloud'un Pub/Sub'ı , ihtiyaç duyduğunuzda otomatik olarak ölçeklenen, küresel olarak dağıtılmış bir mesaj veriyoludur. Function.pubsub kullanarak Pub/Sub olaylarını işleyen bir functions.pubsub oluşturabilirsiniz.

Bir pub/sub işlevini tetikleyin

Belirli bir konuya yeni bir Pub/Sub mesajı gönderildiğinde bir işlevi tetikleyebilirsiniz. İşlevinizi tetiklemek istediğiniz Pub/Sub konu adını belirtmeli ve olayı onPublish() olay işleyicisinde ayarlamalısınız:

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

Pub/alt mesaj yüküne erişin

Pub/Sub mesajının yüküne, işlevinize döndürülen Message nesnesinden erişilebilir. Pub/Sub mesaj gövdesinde JSON içeren mesajlar için, Cloud Functions için Firebase SDK, mesajın kodunu çözmek için bir yardımcı özelliğe sahiptir. Örneğin, basit bir JSON yüküyle yayınlanan bir mesaj:

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

Bunun gibi bir JSON veri yüküne json özelliği aracılığıyla 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, Pub/Sub mesajında, mesaj nesnesinde base64 ile kodlanmış dizeler olarak bulunur. Aşağıdaki gibi bir mesajı okumak için base64 kodlu dizenin kodunu gösterildiği 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 özniteliklerine erişim

Yayınla komutunda ayarlanan veri öznitelikleri ile Pub/Sub mesajı gönderilebilir. Örneğin, name özniteliğine sahip bir ileti yayınlayabilirsiniz:

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

Bu tür özellikleri Message.attributes adresinden 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 içinde bulunmadığını fark edebilirsiniz. Bu sorunu çözmek için, herhangi bir mesajın ne zaman yayınlandığını belirleyebileceğiniz ve bir mesajı diğerinden ayırt edebileceğiniz, tetikleyici olayın context.eventId ve context.timestamp 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);
});