Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

ทริกเกอร์ Pub/Sub

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

Pub/Sub ของ Google Cloud เป็นบัสข้อความที่กระจายไปทั่วโลกซึ่งจะปรับขนาดโดยอัตโนมัติตามที่คุณต้องการ คุณสามารถสร้างฟังก์ชันที่จัดการเหตุการณ์ Pub/Sub ได้โดยใช้ functions.pubsub

เรียกใช้ฟังก์ชันผับ/ย่อย

คุณสามารถทริกเกอร์ฟังก์ชันเมื่อใดก็ตามที่ข้อความ Pub/Sub ใหม่ถูกส่งไปยังหัวข้อเฉพาะ คุณต้องระบุชื่อหัวข้อ Pub/Sub ที่คุณต้องการทริกเกอร์ฟังก์ชันของคุณ และตั้งค่าเหตุการณ์ภายในตัวจัดการเหตุการณ์ onPublish() :

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

เข้าถึง payload ข้อความผับ/ย่อย

เพย์โหลดสำหรับข้อความ Pub/Sub สามารถเข้าถึงได้จากวัตถุ Message ที่ส่งคืนไปยังฟังก์ชันของคุณ สำหรับข้อความที่มี JSON ในเนื้อหาข้อความ Pub/Sub Firebase SDK สำหรับ Cloud Functions จะมีคุณสมบัติตัวช่วยในการถอดรหัสข้อความ ตัวอย่างเช่น นี่คือข้อความที่เผยแพร่ด้วยข้อมูล JSON แบบง่าย:

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

คุณสามารถเข้าถึงเพย์โหลดข้อมูล JSON เช่นนี้ผ่านคุณสมบัติ 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);
  }

เพย์โหลดที่ไม่ใช่ JSON อื่นๆ มีอยู่ในข้อความ Pub/Sub เป็นสตริงที่เข้ารหัส base64 ในออบเจ็กต์ข้อความ หากต้องการอ่านข้อความดังต่อไปนี้ คุณต้องถอดรหัสสตริงที่เข้ารหัส base64 ดังที่แสดง:

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

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

เข้าถึงคุณสมบัติข้อความ

สามารถส่งข้อความ Pub/Sub พร้อมแอตทริบิวต์ข้อมูลที่ตั้งไว้ในคำสั่ง publish ตัวอย่างเช่น คุณสามารถเผยแพร่ข้อความที่มีแอตทริบิวต์ name :

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

คุณสามารถอ่านแอตทริบิวต์ดังกล่าวได้จาก Message.attributes :

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

คุณอาจสังเกตเห็นว่าข้อมูลพื้นฐานบางอย่าง เช่น ID ข้อความหรือเวลาในการเผยแพร่ข้อความไม่มีอยู่ใน Message.attributes เพื่อแก้ไขปัญหานี้ คุณสามารถเข้าถึง context.timestamp context.eventId คุณสามารถกำหนดได้ว่าเมื่อใดที่ข้อความใดถูกเผยแพร่และแยกข้อความหนึ่งออกจากอีกข้อความหนึ่ง ตัวอย่างเช่น:

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