Pemicu Pub/Sub


Pub/Sub Google Cloud adalah bus pesan yang didistribusikan secara global yang secara otomatis diskalakan sesuai kebutuhan Anda. Anda dapat membuat fungsi yang menangani peristiwa Pub/Sub menggunakan functions.pubsub.

Memicu fungsi pub/sub

Anda dapat memicu fungsi saat ada pesan Pub/Sub baru yang dikirim ke topik tertentu. Anda harus menentukan nama topik Pub/Sub yang diinginkan untuk memicu fungsi dan menetapkan peristiwa dalam pengendali peristiwa onPublish():

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

Mengakses payload pesan pub/sub {:#access-pub/sub}

Payload untuk pesan Pub/Sub dapat diakses dari objek Message yang ditampilkan di fungsi Anda. Untuk pesan dengan JSON dalam isi pesan Pub/Sub, Firebase SDK untuk Cloud Functions memiliki properti helper untuk mendekode pesan tersebut. Berikut adalah contoh pesan yang dipublikasikan dengan payload JSON sederhana:

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

Anda dapat mengakses payload data JSON seperti ini melalui properti json:

  // 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);
  }

Payload lainnya yang bukan JSON terdapat dalam pesan Pub/Sub sebagai string berenkode base64 di objek pesan. Untuk membaca pesan berikut, Anda harus mendekode string berenkode base64 seperti yang ditunjukkan di bawah:

gcloud pubsub topics publish topic-name --message 'MyMessage'

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

Mengakses atribut pesan {:#access-message}

Pesan Pub/Sub dapat dikirim dengan atribut data yang disetel di perintah publish. Misalnya, Anda dapat memublikasikan pesan dengan atribut name:

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

Anda dapat membaca atribut seperti itu dari Message.attributes:

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

Anda mungkin akan melihat bahwa beberapa data dasar, seperti ID pesan atau waktu publikasi pesan, tidak tersedia di Message.attributes. Untuk mengatasi hal ini, Anda dapat mengakses detail ini di EventContext peristiwa pemicu. Contoh:

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);
});