Google Cloud Pub/Sub, ihtiyacınıza göre otomatik olarak ölçeklendirilen ve küresel olarak dağıtılmış bir ileti 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;
{:#access-message} etkinliklerinin mesaj özelliklerine erişme
Pub/Sub mesajı, "yayınla" komutunda belirlenen 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
üzerinden 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);
});